{
 "cells": [
  {
   "attachments": {},
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "对应`tf.kears` 版本的03，在训练过程中加入更多的控制\n",
    "\n",
    "1. 训练中保存/保存最好的模型\n",
    "2. 早停 \n",
    "3. 训练过程可视化\n",
    "\n",
    "<font color=\"red\">注</font>: 使用 tensorboard 可视化需要安装 tensorflow (TensorBoard依赖于tensorflow库，可以任意安装tensorflow的gpu/cpu版本)\n",
    "\n",
    "```shell\n",
    "pip install tensorflow\n",
    "```"
   ]
  },
  {
   "cell_type": "code",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-01-16T01:54:30.190669Z",
     "start_time": "2025-01-16T01:54:29.185636Z"
    }
   },
   "source": [
    "import matplotlib as mpl\n",
    "import matplotlib.pyplot as plt\n",
    "%matplotlib inline\n",
    "import numpy as np\n",
    "import sklearn\n",
    "import pandas as pd\n",
    "import os\n",
    "import sys\n",
    "import time\n",
    "from tqdm.auto import tqdm\n",
    "import torch\n",
    "import torch.nn as nn\n",
    "import torch.nn.functional as F\n",
    "\n",
    "print(sys.version_info)\n",
    "for module in mpl, np, pd, sklearn, torch:\n",
    "    print(module.__name__, module.__version__)\n",
    "    \n",
    "device = torch.device(\"cuda:0\") if torch.cuda.is_available() else torch.device(\"cpu\")\n",
    "print(device)  #设备是cuda:0，即GPU，如果没有GPU则是cpu\n"
   ],
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "sys.version_info(major=3, minor=12, micro=3, releaselevel='final', serial=0)\n",
      "matplotlib 3.10.0\n",
      "numpy 1.26.4\n",
      "pandas 2.2.3\n",
      "sklearn 1.6.0\n",
      "torch 2.5.1+cpu\n",
      "cpu\n"
     ]
    }
   ],
   "execution_count": 2
  },
  {
   "attachments": {},
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 数据准备"
   ]
  },
  {
   "cell_type": "code",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-01-16T06:19:12.813102Z",
     "start_time": "2025-01-16T06:19:10.285401Z"
    }
   },
   "source": [
    "from torchvision import datasets\n",
    "from torchvision.transforms import ToTensor\n",
    "\n",
    "# fashion_mnist图像分类数据集\n",
    "train_ds = datasets.FashionMNIST(\n",
    "    root=\"data\",\n",
    "    train=True,\n",
    "    download=True,\n",
    "    transform=ToTensor()\n",
    ")\n",
    "\n",
    "test_ds = datasets.FashionMNIST(\n",
    "    root=\"data\",\n",
    "    train=False,\n",
    "    download=True,\n",
    "    transform=ToTensor()\n",
    ")\n",
    "\n",
    "# torchvision 数据集里没有提供训练集和验证集的划分\n",
    "# 当然也可以用 torch.utils.data.Dataset 实现人为划分"
   ],
   "outputs": [],
   "execution_count": 1
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-01-16T06:19:14.624895Z",
     "start_time": "2025-01-16T06:19:14.621350Z"
    }
   },
   "cell_type": "code",
   "source": "type(train_ds)",
   "outputs": [
    {
     "data": {
      "text/plain": [
       "torchvision.datasets.mnist.FashionMNIST"
      ]
     },
     "execution_count": 2,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "execution_count": 2
  },
  {
   "cell_type": "code",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-01-16T01:54:47.525171Z",
     "start_time": "2025-01-16T01:54:47.521908Z"
    }
   },
   "source": [
    "# 从数据集到dataloader\n",
    "train_loader = torch.utils.data.DataLoader(train_ds, batch_size=32, shuffle=True)\n",
    "val_loader = torch.utils.data.DataLoader(test_ds, batch_size=32, shuffle=False)"
   ],
   "outputs": [],
   "execution_count": 4
  },
  {
   "cell_type": "code",
   "source": [
    "# 查看数据\n",
    "for datas, labels in train_loader:\n",
    "    print(datas.shape)\n",
    "    print(labels.shape)\n",
    "    break\n",
    "#查看val_loader\n",
    "for datas, labels in val_loader:\n",
    "    print(datas.shape)\n",
    "    print(labels.shape)\n",
    "    break"
   ],
   "metadata": {
    "collapsed": false,
    "ExecuteTime": {
     "end_time": "2025-01-16T01:54:52.479193Z",
     "start_time": "2025-01-16T01:54:52.470692Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "torch.Size([32, 1, 28, 28])\n",
      "torch.Size([32])\n",
      "torch.Size([32, 1, 28, 28])\n",
      "torch.Size([32])\n"
     ]
    }
   ],
   "execution_count": 5
  },
  {
   "attachments": {},
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 定义模型"
   ]
  },
  {
   "cell_type": "code",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-01-16T01:54:56.989172Z",
     "start_time": "2025-01-16T01:54:56.984664Z"
    }
   },
   "source": [
    "class NeuralNetwork(nn.Module):\n",
    "    def __init__(self):\n",
    "        super().__init__()\n",
    "        self.flatten = nn.Flatten()\n",
    "        self.linear_relu_stack = nn.Sequential(\n",
    "            nn.Linear(28 * 28, 300),  # in_features=784, out_features=300\n",
    "            nn.ReLU(),\n",
    "            nn.Linear(300, 100),\n",
    "            nn.ReLU(),\n",
    "            nn.Linear(100, 10),\n",
    "        )\n",
    "\n",
    "    def forward(self, x):\n",
    "        # x.shape [batch size, 1, 28, 28]\n",
    "        x = self.flatten(x)  \n",
    "        # 展平后 x.shape [batch size, 28 * 28]\n",
    "        logits = self.linear_relu_stack(x)\n",
    "        # logits.shape [batch size, 10]\n",
    "        return logits\n",
    "    \n",
    "model = NeuralNetwork()"
   ],
   "outputs": [],
   "execution_count": 6
  },
  {
   "attachments": {},
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 训练\n",
    "\n",
    "pytorch的训练需要自行实现，包括\n",
    "1. 定义损失函数\n",
    "2. 定义优化器\n",
    "3. 定义训练步\n",
    "4. 训练"
   ]
  },
  {
   "cell_type": "code",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-01-16T01:55:02.065468Z",
     "start_time": "2025-01-16T01:55:02.031893Z"
    }
   },
   "source": [
    "from sklearn.metrics import accuracy_score\n",
    "\n",
    "@torch.no_grad()\n",
    "def evaluating(model, dataloader, loss_fct):\n",
    "    loss_list = []\n",
    "    pred_list = []\n",
    "    label_list = []\n",
    "    for datas, labels in dataloader:\n",
    "        #datas.shape [batch size, 1, 28, 28]\n",
    "        #labels.shape [batch size]\n",
    "        datas = datas.to(device)\n",
    "        labels = labels.to(device)\n",
    "        # 前向计算\n",
    "        logits = model(datas)\n",
    "        loss = loss_fct(logits, labels)         # 验证集损失\n",
    "        loss_list.append(loss.item()) # tensor.item() 获取tensor的数值，loss是只有一个元素的tensor\n",
    "        \n",
    "        preds = logits.argmax(axis=-1)    # 验证集预测, axis=-1 表示最后一个维度,因为logits.shape [batch size, 10]，所以axis=-1表示对最后一个维度求argmax，即对每个样本的10个类别的概率求argmax，得到最大概率的类别, preds.shape [batch size]\n",
    "        pred_list.extend(preds.cpu().numpy().tolist()) # tensor转numpy，再转list\n",
    "        label_list.extend(labels.cpu().numpy().tolist())\n",
    "        \n",
    "    acc = accuracy_score(label_list, pred_list) # 验证集准确率\n",
    "    return np.mean(loss_list), acc # 返回验证集平均损失和准确率\n"
   ],
   "outputs": [],
   "execution_count": 7
  },
  {
   "attachments": {},
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# TensorBoard 可视化\n",
    "\n",
    "pip install tensorboard\n",
    "训练过程中可以使用如下命令启动tensorboard服务。注意使用绝对路径，否则会报错\n",
    "\n",
    "```shell\n",
    " tensorboard  --logdir=\"D:\\BaiduSyncdisk\\pytorch\\chapter_2_torch\\runs\" --host 0.0.0.0 --port 8848\n",
    "```"
   ]
  },
  {
   "metadata": {},
   "cell_type": "markdown",
   "source": "在命令行where tensorboard才可以用"
  },
  {
   "cell_type": "code",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-01-16T01:59:55.569696Z",
     "start_time": "2025-01-16T01:59:53.301177Z"
    }
   },
   "source": [
    "from torch.utils.tensorboard import SummaryWriter\n",
    "\n",
    "\n",
    "class TensorBoardCallback:\n",
    "    def __init__(self, log_dir, flush_secs=10):\n",
    "        \"\"\"\n",
    "        Args:\n",
    "            log_dir (str): dir to write log.\n",
    "            flush_secs (int, optional): write to dsk each flush_secs seconds. Defaults to 10.\n",
    "        \"\"\"\n",
    "        self.writer = SummaryWriter(log_dir=log_dir, flush_secs=flush_secs) # 实例化SummaryWriter, log_dir是log存放路径，flush_secs是每隔多少秒写入磁盘\n",
    "\n",
    "    def draw_model(self, model, input_shape):#graphs\n",
    "        self.writer.add_graph(model, input_to_model=torch.randn(input_shape)) # 画模型图\n",
    "        \n",
    "    def add_loss_scalars(self, step, loss, val_loss):\n",
    "        self.writer.add_scalars(\n",
    "            main_tag=\"training/loss\", \n",
    "            tag_scalar_dict={\"loss\": loss, \"val_loss\": val_loss},\n",
    "            global_step=step,\n",
    "            ) # 画loss曲线, main_tag是主tag，tag_scalar_dict是子tag，global_step是步数\n",
    "        \n",
    "    def add_acc_scalars(self, step, acc, val_acc):\n",
    "        self.writer.add_scalars(\n",
    "            main_tag=\"training/accuracy\",\n",
    "            tag_scalar_dict={\"accuracy\": acc, \"val_accuracy\": val_acc},\n",
    "            global_step=step,\n",
    "        ) # 画acc曲线, main_tag是主tag，tag_scalar_dict是子tag，global_step是步数\n",
    "        \n",
    "    def add_lr_scalars(self, step, learning_rate):\n",
    "        self.writer.add_scalars(\n",
    "            main_tag=\"training/learning_rate\",\n",
    "            tag_scalar_dict={\"learning_rate\": learning_rate},\n",
    "            global_step=step,\n",
    "        ) # 画lr曲线, main_tag是主tag，tag_scalar_dict是子tag，global_step是步数\n",
    "    \n",
    "    def __call__(self, step, **kwargs):\n",
    "        # add loss,把loss，val_loss取掉，画loss曲线\n",
    "        loss = kwargs.pop(\"loss\", None)\n",
    "        val_loss = kwargs.pop(\"val_loss\", None)\n",
    "        if loss is not None and val_loss is not None:\n",
    "            self.add_loss_scalars(step, loss, val_loss) # 画loss曲线\n",
    "        # add acc\n",
    "        acc = kwargs.pop(\"acc\", None)\n",
    "        val_acc = kwargs.pop(\"val_acc\", None)\n",
    "        if acc is not None and val_acc is not None:\n",
    "            self.add_acc_scalars(step, acc, val_acc) # 画acc曲线\n",
    "        # add lr\n",
    "        learning_rate = kwargs.pop(\"lr\", None)\n",
    "        if learning_rate is not None:\n",
    "            self.add_lr_scalars(step, learning_rate) # 画lr曲线\n"
   ],
   "outputs": [],
   "execution_count": 8
  },
  {
   "attachments": {},
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Save Best\n"
   ]
  },
  {
   "cell_type": "code",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-01-16T02:34:55.096705Z",
     "start_time": "2025-01-16T02:34:55.092600Z"
    }
   },
   "source": [
    "class SaveCheckpointsCallback:\n",
    "    def __init__(self, save_dir, save_step=500, save_best_only=True):\n",
    "        \"\"\"\n",
    "        Save checkpoints each save_epoch epoch. \n",
    "        We save checkpoint by epoch in this implementation.\n",
    "        Usually, training scripts with pytorch evaluating model and save checkpoint by step.\n",
    "\n",
    "        Args:\n",
    "            save_dir (str): dir to save checkpoint\n",
    "            save_epoch (int, optional): the frequency to save checkpoint. Defaults to 1.\n",
    "            save_best_only (bool, optional): If True, only save the best model or save each model at every epoch.\n",
    "        \"\"\"\n",
    "        self.save_dir = save_dir # 保存路径\n",
    "        self.save_step = save_step # 保存步数\n",
    "        self.save_best_only = save_best_only # 是否只保存最好的模型\n",
    "        self.best_metrics = -1 # 最好的指标，指标不可能为负数，所以初始化为-1\n",
    "        \n",
    "        # mkdir\n",
    "        if not os.path.exists(self.save_dir): # 如果不存在保存路径，则创建\n",
    "            os.mkdir(self.save_dir)\n",
    "        \n",
    "    def __call__(self, step, state_dict, metric=None):\n",
    "        if step % self.save_step > 0: #每隔save_step步保存一次\n",
    "            return\n",
    "        \n",
    "        if self.save_best_only:\n",
    "            assert metric is not None # 必须传入metric\n",
    "            if metric >= self.best_metrics:\n",
    "                # save checkpoints\n",
    "                torch.save(state_dict, os.path.join(self.save_dir, \"best.ckpt\")) # 保存最好的模型，覆盖之前的模型，不保存step，只保存state_dict，即模型参数，不保存优化器参数\n",
    "                # update best metrics\n",
    "                self.best_metrics = metric\n",
    "        else:\n",
    "            torch.save(state_dict, os.path.join(self.save_dir, f\"{step}.ckpt\")) # 保存每个step的模型，不覆盖之前的模型，保存step，保存state_dict，即模型参数，不保存优化器参数\n",
    "\n"
   ],
   "outputs": [],
   "execution_count": 9
  },
  {
   "attachments": {},
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Early Stop"
   ]
  },
  {
   "cell_type": "code",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-01-16T02:42:45.143104Z",
     "start_time": "2025-01-16T02:42:45.139659Z"
    }
   },
   "source": [
    "class EarlyStopCallback:\n",
    "    def __init__(self, patience=5, min_delta=0.01):\n",
    "        \"\"\"\n",
    "\n",
    "        Args:\n",
    "            patience (int, optional): Number of epochs with no improvement after which training will be stopped.. Defaults to 5.\n",
    "            min_delta (float, optional): Minimum change in the monitored quantity to qualify as an improvement, i.e. an absolute \n",
    "                change of less than min_delta, will count as no improvement. Defaults to 0.01.\n",
    "        \"\"\"\n",
    "        self.patience = patience # 多少个step没有提升就停止训练\n",
    "        self.min_delta = min_delta # 最小的提升幅度\n",
    "        self.best_metric = -1\n",
    "        self.counter = 0 # 计数器，记录多少个step没有提升\n",
    "        \n",
    "    def __call__(self, metric):\n",
    "        if metric >= self.best_metric + self.min_delta:#用准确率\n",
    "            # update best metric\n",
    "            self.best_metric = metric\n",
    "            # reset counter \n",
    "            self.counter = 0\n",
    "        else: \n",
    "            self.counter += 1 # 计数器加1，下面的patience判断用到\n",
    "            \n",
    "    @property #使用@property装饰器，使得 对象.early_stop可以调用，不需要()\n",
    "    def early_stop(self):\n",
    "        return self.counter >= self.patience\n"
   ],
   "outputs": [],
   "execution_count": 10
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "outputs": [
    {
     "data": {
      "text/plain": "80000"
     },
     "execution_count": 10,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "500*32*5"
   ],
   "metadata": {
    "collapsed": false,
    "ExecuteTime": {
     "end_time": "2024-07-18T02:43:54.503637Z",
     "start_time": "2024-07-18T02:43:54.488870100Z"
    }
   }
  },
  {
   "cell_type": "code",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-01-16T02:54:45.279503Z",
     "start_time": "2025-01-16T02:54:45.273848Z"
    }
   },
   "source": [
    "# 训练\n",
    "def training(\n",
    "    model, \n",
    "    train_loader, \n",
    "    val_loader, \n",
    "    epoch, \n",
    "    loss_fct, \n",
    "    optimizer, \n",
    "    tensorboard_callback=None,\n",
    "    save_ckpt_callback=None,\n",
    "    early_stop_callback=None,\n",
    "    eval_step=500,\n",
    "    ):\n",
    "    record_dict = {\n",
    "        \"train\": [],\n",
    "        \"val\": []\n",
    "    }\n",
    "    \n",
    "    global_step = 0\n",
    "    model.train()\n",
    "    with tqdm(total=epoch * len(train_loader)) as pbar:\n",
    "        for epoch_id in range(epoch):\n",
    "            # training\n",
    "            for datas, labels in train_loader:\n",
    "                datas = datas.to(device) # 数据放到device上\n",
    "                labels = labels.to(device) # 标签放到device上\n",
    "                # 梯度清空\n",
    "                optimizer.zero_grad()\n",
    "                # 模型前向计算\n",
    "                logits = model(datas)\n",
    "                # 计算损失\n",
    "                loss = loss_fct(logits, labels)\n",
    "                # 梯度回传，计算梯度，更新参数，这里是更新模型参数\n",
    "                loss.backward()\n",
    "                # 调整优化器，包括学习率的变动等\n",
    "                optimizer.step()\n",
    "                preds = logits.argmax(axis=-1)\n",
    "            \n",
    "                acc = accuracy_score(labels.cpu().numpy(), preds.cpu().numpy())    \n",
    "                loss = loss.cpu().item()\n",
    "                # record\n",
    "                \n",
    "                record_dict[\"train\"].append({\n",
    "                    \"loss\": loss, \"acc\": acc, \"step\": global_step\n",
    "                })\n",
    "                \n",
    "                # evaluating\n",
    "                if global_step % eval_step == 0:\n",
    "                    model.eval()  # 切换到验证集模式\n",
    "                    val_loss, val_acc = evaluating(model, val_loader, loss_fct)\n",
    "                    record_dict[\"val\"].append({\n",
    "                        \"loss\": val_loss, \"acc\": val_acc, \"step\": global_step\n",
    "                    })\n",
    "                    model.train() # 切换回训练集模式\n",
    "                    \n",
    "                    # 1. 使用 tensorboard 可视化\n",
    "                    if tensorboard_callback is not None:\n",
    "                        tensorboard_callback(\n",
    "                            global_step, \n",
    "                            loss=loss, val_loss=val_loss,\n",
    "                            acc=acc, val_acc=val_acc,\n",
    "                            lr=optimizer.param_groups[0][\"lr\"], # 取出当前学习率\n",
    "                            )\n",
    "                    \n",
    "                    # 2. 保存模型权重 save model checkpoint\n",
    "                    if save_ckpt_callback is not None:\n",
    "                        save_ckpt_callback(global_step, model.state_dict(), metric=val_acc) # 保存最好的模型，覆盖之前的模型，保存step，保存state_dict,通过metric判断是否保存最好的模型\n",
    "\n",
    "                    # 3. 早停 Early Stop\n",
    "                    if early_stop_callback is not None:\n",
    "                        early_stop_callback(val_acc) # 验证集准确率不再提升，则停止训练\n",
    "                        if early_stop_callback.early_stop:# 验证集准确率不再提升，则停止训练\n",
    "                            print(f\"Early stop at epoch {epoch_id} / global_step {global_step}\")\n",
    "                            return record_dict\n",
    "                    \n",
    "                # udate step\n",
    "                global_step += 1\n",
    "                pbar.update(1)\n",
    "                pbar.set_postfix({\"epoch\": epoch_id})\n",
    "        \n",
    "    return record_dict"
   ],
   "outputs": [],
   "execution_count": 11
  },
  {
   "cell_type": "code",
   "source": [
    "epoch = 100\n",
    "\n",
    "model = NeuralNetwork()\n",
    "\n",
    "# 1. 定义损失函数 采用MSE损失\n",
    "loss_fct = nn.CrossEntropyLoss()\n",
    "# 2. 定义优化器 采用SGD\n",
    "# Optimizers specified in the torch.optim package\n",
    "optimizer = torch.optim.SGD(model.parameters(), lr=0.001, momentum=0.9)\n",
    "\n",
    "# 1. tensorboard 可视化\n",
    "tensorboard_callback = TensorBoardCallback(\"runs\")\n",
    "tensorboard_callback.draw_model(model, [1, 28, 28])\n",
    "# 2. save best\n",
    "save_ckpt_callback = SaveCheckpointsCallback(\"checkpoints\", save_best_only=True)\n",
    "# 3. early stop\n",
    "early_stop_callback = EarlyStopCallback(patience=10)\n"
   ],
   "metadata": {
    "collapsed": false,
    "ExecuteTime": {
     "end_time": "2025-01-16T02:59:05.291336Z",
     "start_time": "2025-01-16T02:59:05.265942Z"
    }
   },
   "outputs": [],
   "execution_count": 16
  },
  {
   "cell_type": "code",
   "source": [
    "list(model.parameters())[1] #可学习的模型参数"
   ],
   "metadata": {
    "collapsed": false,
    "ExecuteTime": {
     "end_time": "2025-01-16T02:59:13.485862Z",
     "start_time": "2025-01-16T02:59:13.481555Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Parameter containing:\n",
       "tensor([ 0.0191, -0.0166,  0.0011,  0.0159, -0.0246,  0.0279,  0.0305,  0.0150,\n",
       "         0.0329,  0.0236,  0.0275,  0.0353,  0.0176,  0.0265,  0.0318, -0.0351,\n",
       "         0.0292, -0.0357, -0.0028,  0.0107, -0.0242,  0.0338,  0.0062,  0.0122,\n",
       "         0.0024,  0.0195, -0.0067, -0.0206,  0.0266,  0.0188, -0.0079,  0.0010,\n",
       "         0.0197,  0.0325,  0.0097, -0.0292,  0.0180,  0.0160,  0.0309,  0.0056,\n",
       "         0.0315,  0.0248,  0.0080,  0.0056, -0.0323,  0.0148, -0.0149, -0.0198,\n",
       "        -0.0167, -0.0233,  0.0308,  0.0156,  0.0108,  0.0115, -0.0214,  0.0227,\n",
       "         0.0178, -0.0201, -0.0297, -0.0304,  0.0192,  0.0284, -0.0328,  0.0309,\n",
       "        -0.0354, -0.0337,  0.0270, -0.0341, -0.0292,  0.0109, -0.0235,  0.0122,\n",
       "        -0.0241, -0.0179, -0.0018,  0.0215, -0.0019,  0.0089,  0.0027,  0.0147,\n",
       "         0.0181,  0.0287, -0.0269, -0.0002,  0.0022,  0.0093, -0.0091, -0.0343,\n",
       "         0.0002,  0.0223,  0.0261,  0.0079, -0.0245,  0.0096, -0.0271,  0.0138,\n",
       "        -0.0037,  0.0335,  0.0240,  0.0273, -0.0121, -0.0098, -0.0336,  0.0200,\n",
       "         0.0215, -0.0341,  0.0009, -0.0308,  0.0222,  0.0348,  0.0151, -0.0261,\n",
       "        -0.0210,  0.0225,  0.0313,  0.0082,  0.0110,  0.0168, -0.0294,  0.0222,\n",
       "         0.0067,  0.0153, -0.0220,  0.0029,  0.0232,  0.0010, -0.0348,  0.0154,\n",
       "         0.0067,  0.0246, -0.0244,  0.0111,  0.0258,  0.0274,  0.0272, -0.0302,\n",
       "        -0.0076,  0.0154,  0.0259,  0.0234, -0.0079, -0.0129,  0.0105,  0.0101,\n",
       "        -0.0314,  0.0298,  0.0075,  0.0182,  0.0170,  0.0029, -0.0244, -0.0295,\n",
       "        -0.0273,  0.0066, -0.0274, -0.0178,  0.0186,  0.0317, -0.0326, -0.0098,\n",
       "        -0.0334, -0.0228, -0.0113, -0.0322,  0.0246,  0.0334,  0.0311,  0.0203,\n",
       "         0.0063, -0.0077, -0.0169,  0.0005,  0.0008, -0.0034, -0.0078,  0.0060,\n",
       "        -0.0296, -0.0224, -0.0021,  0.0173, -0.0290,  0.0271,  0.0183,  0.0276,\n",
       "         0.0167,  0.0323,  0.0334, -0.0027, -0.0031,  0.0004,  0.0157,  0.0074,\n",
       "        -0.0227,  0.0016, -0.0198,  0.0345,  0.0339,  0.0322, -0.0348, -0.0135,\n",
       "         0.0301, -0.0263, -0.0188, -0.0005, -0.0155,  0.0162,  0.0275,  0.0095,\n",
       "        -0.0078, -0.0088,  0.0176, -0.0240,  0.0247, -0.0226,  0.0297,  0.0317,\n",
       "         0.0069,  0.0005, -0.0141,  0.0093,  0.0017, -0.0007, -0.0004,  0.0174,\n",
       "        -0.0216, -0.0039,  0.0101,  0.0055, -0.0027, -0.0167, -0.0344, -0.0239,\n",
       "         0.0284,  0.0219, -0.0156, -0.0272,  0.0284,  0.0122,  0.0312, -0.0289,\n",
       "         0.0198,  0.0041, -0.0181, -0.0015,  0.0183,  0.0038,  0.0002,  0.0066,\n",
       "         0.0261, -0.0004,  0.0354, -0.0033,  0.0239,  0.0062,  0.0100, -0.0341,\n",
       "         0.0116,  0.0134,  0.0242,  0.0045, -0.0308, -0.0343,  0.0253, -0.0017,\n",
       "        -0.0265, -0.0158, -0.0091,  0.0074,  0.0177,  0.0256,  0.0212, -0.0271,\n",
       "        -0.0316,  0.0152, -0.0333,  0.0112,  0.0006, -0.0124, -0.0193,  0.0233,\n",
       "        -0.0176, -0.0228, -0.0312,  0.0068,  0.0292, -0.0257, -0.0250,  0.0072,\n",
       "        -0.0183, -0.0035,  0.0013, -0.0009, -0.0002,  0.0072, -0.0029,  0.0181,\n",
       "        -0.0202,  0.0154, -0.0183, -0.0119], requires_grad=True)"
      ]
     },
     "execution_count": 17,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "execution_count": 17
  },
  {
   "cell_type": "code",
   "source": "model.state_dict().keys() #模型参数名字",
   "metadata": {
    "collapsed": false,
    "ExecuteTime": {
     "end_time": "2025-01-16T02:58:26.162989Z",
     "start_time": "2025-01-16T02:58:26.160534Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "odict_keys(['linear_relu_stack.0.weight', 'linear_relu_stack.0.bias', 'linear_relu_stack.2.weight', 'linear_relu_stack.2.bias', 'linear_relu_stack.4.weight', 'linear_relu_stack.4.bias'])"
      ]
     },
     "execution_count": 15,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "execution_count": 15
  },
  {
   "cell_type": "code",
   "source": [
    "model = model.to(device) # 放到device上\n",
    "record = training(\n",
    "    model,\n",
    "    train_loader,\n",
    "    val_loader,\n",
    "    epoch,\n",
    "    loss_fct,\n",
    "    optimizer,\n",
    "    tensorboard_callback=tensorboard_callback,\n",
    "    save_ckpt_callback=save_ckpt_callback,\n",
    "    early_stop_callback=early_stop_callback,\n",
    "    eval_step=1000\n",
    "    )\n",
    "#没有进度条，是因为pycharm本身jupyter的问题"
   ],
   "metadata": {
    "collapsed": false,
    "ExecuteTime": {
     "end_time": "2025-01-16T03:02:20.992968Z",
     "start_time": "2025-01-16T03:00:43.272387Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "  0%|          | 0/187500 [00:00<?, ?it/s]"
      ],
      "application/vnd.jupyter.widget-view+json": {
       "version_major": 2,
       "version_minor": 0,
       "model_id": "9844d47d1cd04b83acffa28052f63034"
      }
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Early stop at epoch 14 / global_step 27000\n"
     ]
    }
   ],
   "execution_count": 18
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "0 a\n",
      "1 b\n",
      "2 c\n"
     ]
    }
   ],
   "source": [
    "#帮我写个enumerate例子\n",
    "for i, item in enumerate([\"a\", \"b\", \"c\"]):\n",
    "    print(i, item)"
   ],
   "metadata": {
    "collapsed": false,
    "ExecuteTime": {
     "end_time": "2024-04-23T07:26:19.957701200Z",
     "start_time": "2024-04-23T07:26:19.914720400Z"
    }
   }
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-01-16T03:05:46.162193Z",
     "start_time": "2025-01-16T03:05:46.139017Z"
    }
   },
   "cell_type": "code",
   "source": "record",
   "outputs": [
    {
     "data": {
      "text/plain": [
       "{'train': [{'loss': 2.2981369495391846, 'acc': 0.0625, 'step': 0},\n",
       "  {'loss': 2.301849842071533, 'acc': 0.1875, 'step': 1},\n",
       "  {'loss': 2.2930521965026855, 'acc': 0.09375, 'step': 2},\n",
       "  {'loss': 2.331207513809204, 'acc': 0.0625, 'step': 3},\n",
       "  {'loss': 2.301499128341675, 'acc': 0.09375, 'step': 4},\n",
       "  {'loss': 2.302429676055908, 'acc': 0.125, 'step': 5},\n",
       "  {'loss': 2.2840662002563477, 'acc': 0.15625, 'step': 6},\n",
       "  {'loss': 2.302001953125, 'acc': 0.09375, 'step': 7},\n",
       "  {'loss': 2.291813373565674, 'acc': 0.03125, 'step': 8},\n",
       "  {'loss': 2.31387996673584, 'acc': 0.09375, 'step': 9},\n",
       "  {'loss': 2.2583656311035156, 'acc': 0.25, 'step': 10},\n",
       "  {'loss': 2.3175008296966553, 'acc': 0.0625, 'step': 11},\n",
       "  {'loss': 2.3259198665618896, 'acc': 0.03125, 'step': 12},\n",
       "  {'loss': 2.2974166870117188, 'acc': 0.1875, 'step': 13},\n",
       "  {'loss': 2.317533493041992, 'acc': 0.09375, 'step': 14},\n",
       "  {'loss': 2.2901957035064697, 'acc': 0.125, 'step': 15},\n",
       "  {'loss': 2.289961814880371, 'acc': 0.125, 'step': 16},\n",
       "  {'loss': 2.3093276023864746, 'acc': 0.125, 'step': 17},\n",
       "  {'loss': 2.2890625, 'acc': 0.09375, 'step': 18},\n",
       "  {'loss': 2.3047690391540527, 'acc': 0.125, 'step': 19},\n",
       "  {'loss': 2.3093864917755127, 'acc': 0.21875, 'step': 20},\n",
       "  {'loss': 2.2985761165618896, 'acc': 0.1875, 'step': 21},\n",
       "  {'loss': 2.295865535736084, 'acc': 0.1875, 'step': 22},\n",
       "  {'loss': 2.293076753616333, 'acc': 0.21875, 'step': 23},\n",
       "  {'loss': 2.2767581939697266, 'acc': 0.15625, 'step': 24},\n",
       "  {'loss': 2.285501003265381, 'acc': 0.15625, 'step': 25},\n",
       "  {'loss': 2.292288303375244, 'acc': 0.125, 'step': 26},\n",
       "  {'loss': 2.276350736618042, 'acc': 0.1875, 'step': 27},\n",
       "  {'loss': 2.2722811698913574, 'acc': 0.09375, 'step': 28},\n",
       "  {'loss': 2.2963693141937256, 'acc': 0.125, 'step': 29},\n",
       "  {'loss': 2.3046398162841797, 'acc': 0.03125, 'step': 30},\n",
       "  {'loss': 2.2855288982391357, 'acc': 0.125, 'step': 31},\n",
       "  {'loss': 2.294677972793579, 'acc': 0.21875, 'step': 32},\n",
       "  {'loss': 2.280156373977661, 'acc': 0.15625, 'step': 33},\n",
       "  {'loss': 2.2942662239074707, 'acc': 0.15625, 'step': 34},\n",
       "  {'loss': 2.2757766246795654, 'acc': 0.0625, 'step': 35},\n",
       "  {'loss': 2.268693208694458, 'acc': 0.15625, 'step': 36},\n",
       "  {'loss': 2.2733240127563477, 'acc': 0.1875, 'step': 37},\n",
       "  {'loss': 2.2769336700439453, 'acc': 0.1875, 'step': 38},\n",
       "  {'loss': 2.2815444469451904, 'acc': 0.03125, 'step': 39},\n",
       "  {'loss': 2.3051931858062744, 'acc': 0.125, 'step': 40},\n",
       "  {'loss': 2.2591428756713867, 'acc': 0.3125, 'step': 41},\n",
       "  {'loss': 2.2869255542755127, 'acc': 0.1875, 'step': 42},\n",
       "  {'loss': 2.2580792903900146, 'acc': 0.15625, 'step': 43},\n",
       "  {'loss': 2.2775514125823975, 'acc': 0.125, 'step': 44},\n",
       "  {'loss': 2.2667012214660645, 'acc': 0.1875, 'step': 45},\n",
       "  {'loss': 2.2624423503875732, 'acc': 0.28125, 'step': 46},\n",
       "  {'loss': 2.2525763511657715, 'acc': 0.15625, 'step': 47},\n",
       "  {'loss': 2.267883777618408, 'acc': 0.21875, 'step': 48},\n",
       "  {'loss': 2.2613539695739746, 'acc': 0.1875, 'step': 49},\n",
       "  {'loss': 2.2652623653411865, 'acc': 0.1875, 'step': 50},\n",
       "  {'loss': 2.28066349029541, 'acc': 0.125, 'step': 51},\n",
       "  {'loss': 2.2608325481414795, 'acc': 0.15625, 'step': 52},\n",
       "  {'loss': 2.253577709197998, 'acc': 0.21875, 'step': 53},\n",
       "  {'loss': 2.252288341522217, 'acc': 0.21875, 'step': 54},\n",
       "  {'loss': 2.2345662117004395, 'acc': 0.34375, 'step': 55},\n",
       "  {'loss': 2.27013897895813, 'acc': 0.09375, 'step': 56},\n",
       "  {'loss': 2.246222734451294, 'acc': 0.25, 'step': 57},\n",
       "  {'loss': 2.2469966411590576, 'acc': 0.3125, 'step': 58},\n",
       "  {'loss': 2.260768175125122, 'acc': 0.1875, 'step': 59},\n",
       "  {'loss': 2.2455251216888428, 'acc': 0.21875, 'step': 60},\n",
       "  {'loss': 2.2459561824798584, 'acc': 0.25, 'step': 61},\n",
       "  {'loss': 2.235098361968994, 'acc': 0.1875, 'step': 62},\n",
       "  {'loss': 2.2392866611480713, 'acc': 0.25, 'step': 63},\n",
       "  {'loss': 2.2365732192993164, 'acc': 0.15625, 'step': 64},\n",
       "  {'loss': 2.233039617538452, 'acc': 0.1875, 'step': 65},\n",
       "  {'loss': 2.248002529144287, 'acc': 0.15625, 'step': 66},\n",
       "  {'loss': 2.2570509910583496, 'acc': 0.15625, 'step': 67},\n",
       "  {'loss': 2.2403247356414795, 'acc': 0.25, 'step': 68},\n",
       "  {'loss': 2.233915090560913, 'acc': 0.21875, 'step': 69},\n",
       "  {'loss': 2.2639272212982178, 'acc': 0.125, 'step': 70},\n",
       "  {'loss': 2.235464572906494, 'acc': 0.125, 'step': 71},\n",
       "  {'loss': 2.230604648590088, 'acc': 0.21875, 'step': 72},\n",
       "  {'loss': 2.2464613914489746, 'acc': 0.125, 'step': 73},\n",
       "  {'loss': 2.2261528968811035, 'acc': 0.375, 'step': 74},\n",
       "  {'loss': 2.2442052364349365, 'acc': 0.125, 'step': 75},\n",
       "  {'loss': 2.2635912895202637, 'acc': 0.09375, 'step': 76},\n",
       "  {'loss': 2.2240772247314453, 'acc': 0.1875, 'step': 77},\n",
       "  {'loss': 2.2427406311035156, 'acc': 0.1875, 'step': 78},\n",
       "  {'loss': 2.223649740219116, 'acc': 0.34375, 'step': 79},\n",
       "  {'loss': 2.242795705795288, 'acc': 0.15625, 'step': 80},\n",
       "  {'loss': 2.2046196460723877, 'acc': 0.28125, 'step': 81},\n",
       "  {'loss': 2.239121913909912, 'acc': 0.125, 'step': 82},\n",
       "  {'loss': 2.246303081512451, 'acc': 0.21875, 'step': 83},\n",
       "  {'loss': 2.238616704940796, 'acc': 0.21875, 'step': 84},\n",
       "  {'loss': 2.207742691040039, 'acc': 0.25, 'step': 85},\n",
       "  {'loss': 2.2071876525878906, 'acc': 0.25, 'step': 86},\n",
       "  {'loss': 2.199655532836914, 'acc': 0.1875, 'step': 87},\n",
       "  {'loss': 2.202890396118164, 'acc': 0.3125, 'step': 88},\n",
       "  {'loss': 2.211906671524048, 'acc': 0.1875, 'step': 89},\n",
       "  {'loss': 2.210637092590332, 'acc': 0.1875, 'step': 90},\n",
       "  {'loss': 2.216454029083252, 'acc': 0.1875, 'step': 91},\n",
       "  {'loss': 2.215308427810669, 'acc': 0.21875, 'step': 92},\n",
       "  {'loss': 2.2083182334899902, 'acc': 0.21875, 'step': 93},\n",
       "  {'loss': 2.223813772201538, 'acc': 0.15625, 'step': 94},\n",
       "  {'loss': 2.2062723636627197, 'acc': 0.21875, 'step': 95},\n",
       "  {'loss': 2.218076705932617, 'acc': 0.09375, 'step': 96},\n",
       "  {'loss': 2.2121922969818115, 'acc': 0.15625, 'step': 97},\n",
       "  {'loss': 2.216939926147461, 'acc': 0.15625, 'step': 98},\n",
       "  {'loss': 2.2126729488372803, 'acc': 0.15625, 'step': 99},\n",
       "  {'loss': 2.205322027206421, 'acc': 0.15625, 'step': 100},\n",
       "  {'loss': 2.2290894985198975, 'acc': 0.125, 'step': 101},\n",
       "  {'loss': 2.2047815322875977, 'acc': 0.1875, 'step': 102},\n",
       "  {'loss': 2.2168314456939697, 'acc': 0.1875, 'step': 103},\n",
       "  {'loss': 2.1974916458129883, 'acc': 0.21875, 'step': 104},\n",
       "  {'loss': 2.189203977584839, 'acc': 0.28125, 'step': 105},\n",
       "  {'loss': 2.193265676498413, 'acc': 0.1875, 'step': 106},\n",
       "  {'loss': 2.21311092376709, 'acc': 0.15625, 'step': 107},\n",
       "  {'loss': 2.1955184936523438, 'acc': 0.34375, 'step': 108},\n",
       "  {'loss': 2.1967999935150146, 'acc': 0.1875, 'step': 109},\n",
       "  {'loss': 2.1823673248291016, 'acc': 0.4375, 'step': 110},\n",
       "  {'loss': 2.1852848529815674, 'acc': 0.34375, 'step': 111},\n",
       "  {'loss': 2.2024521827697754, 'acc': 0.21875, 'step': 112},\n",
       "  {'loss': 2.1654539108276367, 'acc': 0.375, 'step': 113},\n",
       "  {'loss': 2.1666018962860107, 'acc': 0.40625, 'step': 114},\n",
       "  {'loss': 2.1496710777282715, 'acc': 0.375, 'step': 115},\n",
       "  {'loss': 2.179184913635254, 'acc': 0.28125, 'step': 116},\n",
       "  {'loss': 2.180280923843384, 'acc': 0.1875, 'step': 117},\n",
       "  {'loss': 2.182539701461792, 'acc': 0.3125, 'step': 118},\n",
       "  {'loss': 2.1797778606414795, 'acc': 0.3125, 'step': 119},\n",
       "  {'loss': 2.1554946899414062, 'acc': 0.375, 'step': 120},\n",
       "  {'loss': 2.182403087615967, 'acc': 0.3125, 'step': 121},\n",
       "  {'loss': 2.1744019985198975, 'acc': 0.25, 'step': 122},\n",
       "  {'loss': 2.1512715816497803, 'acc': 0.34375, 'step': 123},\n",
       "  {'loss': 2.177985906600952, 'acc': 0.375, 'step': 124},\n",
       "  {'loss': 2.10941481590271, 'acc': 0.5625, 'step': 125},\n",
       "  {'loss': 2.1834375858306885, 'acc': 0.1875, 'step': 126},\n",
       "  {'loss': 2.1662545204162598, 'acc': 0.3125, 'step': 127},\n",
       "  {'loss': 2.1590700149536133, 'acc': 0.375, 'step': 128},\n",
       "  {'loss': 2.170839548110962, 'acc': 0.25, 'step': 129},\n",
       "  {'loss': 2.145190715789795, 'acc': 0.34375, 'step': 130},\n",
       "  {'loss': 2.163865327835083, 'acc': 0.28125, 'step': 131},\n",
       "  {'loss': 2.1529436111450195, 'acc': 0.34375, 'step': 132},\n",
       "  {'loss': 2.142455577850342, 'acc': 0.40625, 'step': 133},\n",
       "  {'loss': 2.1343650817871094, 'acc': 0.375, 'step': 134},\n",
       "  {'loss': 2.1289660930633545, 'acc': 0.34375, 'step': 135},\n",
       "  {'loss': 2.125547409057617, 'acc': 0.4375, 'step': 136},\n",
       "  {'loss': 2.148223876953125, 'acc': 0.5, 'step': 137},\n",
       "  {'loss': 2.148876905441284, 'acc': 0.28125, 'step': 138},\n",
       "  {'loss': 2.1651248931884766, 'acc': 0.28125, 'step': 139},\n",
       "  {'loss': 2.142947196960449, 'acc': 0.3125, 'step': 140},\n",
       "  {'loss': 2.1462762355804443, 'acc': 0.34375, 'step': 141},\n",
       "  {'loss': 2.1633377075195312, 'acc': 0.3125, 'step': 142},\n",
       "  {'loss': 2.095906972885132, 'acc': 0.40625, 'step': 143},\n",
       "  {'loss': 2.104416608810425, 'acc': 0.5, 'step': 144},\n",
       "  {'loss': 2.1476030349731445, 'acc': 0.34375, 'step': 145},\n",
       "  {'loss': 2.0966222286224365, 'acc': 0.59375, 'step': 146},\n",
       "  {'loss': 2.1390841007232666, 'acc': 0.375, 'step': 147},\n",
       "  {'loss': 2.1077351570129395, 'acc': 0.5, 'step': 148},\n",
       "  {'loss': 2.152785539627075, 'acc': 0.375, 'step': 149},\n",
       "  {'loss': 2.122894287109375, 'acc': 0.21875, 'step': 150},\n",
       "  {'loss': 2.12079119682312, 'acc': 0.4375, 'step': 151},\n",
       "  {'loss': 2.0915884971618652, 'acc': 0.5, 'step': 152},\n",
       "  {'loss': 2.1252176761627197, 'acc': 0.5, 'step': 153},\n",
       "  {'loss': 2.1196250915527344, 'acc': 0.28125, 'step': 154},\n",
       "  {'loss': 2.0862348079681396, 'acc': 0.40625, 'step': 155},\n",
       "  {'loss': 2.102194309234619, 'acc': 0.5, 'step': 156},\n",
       "  {'loss': 2.1064453125, 'acc': 0.28125, 'step': 157},\n",
       "  {'loss': 2.0754852294921875, 'acc': 0.46875, 'step': 158},\n",
       "  {'loss': 2.157879114151001, 'acc': 0.3125, 'step': 159},\n",
       "  {'loss': 2.0545973777770996, 'acc': 0.40625, 'step': 160},\n",
       "  {'loss': 2.0428764820098877, 'acc': 0.46875, 'step': 161},\n",
       "  {'loss': 2.1064226627349854, 'acc': 0.46875, 'step': 162},\n",
       "  {'loss': 2.1132078170776367, 'acc': 0.34375, 'step': 163},\n",
       "  {'loss': 2.110877513885498, 'acc': 0.375, 'step': 164},\n",
       "  {'loss': 2.0876383781433105, 'acc': 0.5, 'step': 165},\n",
       "  {'loss': 2.0834696292877197, 'acc': 0.5, 'step': 166},\n",
       "  {'loss': 2.0853874683380127, 'acc': 0.375, 'step': 167},\n",
       "  {'loss': 2.0952060222625732, 'acc': 0.34375, 'step': 168},\n",
       "  {'loss': 2.1120591163635254, 'acc': 0.34375, 'step': 169},\n",
       "  {'loss': 2.0422708988189697, 'acc': 0.4375, 'step': 170},\n",
       "  {'loss': 2.0712647438049316, 'acc': 0.3125, 'step': 171},\n",
       "  {'loss': 2.0941169261932373, 'acc': 0.34375, 'step': 172},\n",
       "  {'loss': 2.0825276374816895, 'acc': 0.3125, 'step': 173},\n",
       "  {'loss': 2.076392412185669, 'acc': 0.5, 'step': 174},\n",
       "  {'loss': 2.05839467048645, 'acc': 0.375, 'step': 175},\n",
       "  {'loss': 2.074953317642212, 'acc': 0.46875, 'step': 176},\n",
       "  {'loss': 2.0578649044036865, 'acc': 0.34375, 'step': 177},\n",
       "  {'loss': 2.0455849170684814, 'acc': 0.5, 'step': 178},\n",
       "  {'loss': 2.0481250286102295, 'acc': 0.46875, 'step': 179},\n",
       "  {'loss': 2.028743028640747, 'acc': 0.375, 'step': 180},\n",
       "  {'loss': 2.07155704498291, 'acc': 0.34375, 'step': 181},\n",
       "  {'loss': 2.0260775089263916, 'acc': 0.5, 'step': 182},\n",
       "  {'loss': 2.037100076675415, 'acc': 0.40625, 'step': 183},\n",
       "  {'loss': 2.0103538036346436, 'acc': 0.53125, 'step': 184},\n",
       "  {'loss': 2.0639259815216064, 'acc': 0.46875, 'step': 185},\n",
       "  {'loss': 2.0539019107818604, 'acc': 0.375, 'step': 186},\n",
       "  {'loss': 2.019432783126831, 'acc': 0.625, 'step': 187},\n",
       "  {'loss': 2.0171761512756348, 'acc': 0.53125, 'step': 188},\n",
       "  {'loss': 2.0403664112091064, 'acc': 0.5, 'step': 189},\n",
       "  {'loss': 2.0655922889709473, 'acc': 0.375, 'step': 190},\n",
       "  {'loss': 2.0062992572784424, 'acc': 0.59375, 'step': 191},\n",
       "  {'loss': 1.997790813446045, 'acc': 0.53125, 'step': 192},\n",
       "  {'loss': 1.9786618947982788, 'acc': 0.5625, 'step': 193},\n",
       "  {'loss': 2.018716812133789, 'acc': 0.40625, 'step': 194},\n",
       "  {'loss': 2.009181261062622, 'acc': 0.53125, 'step': 195},\n",
       "  {'loss': 2.024233102798462, 'acc': 0.375, 'step': 196},\n",
       "  {'loss': 1.9898936748504639, 'acc': 0.5625, 'step': 197},\n",
       "  {'loss': 1.9300429821014404, 'acc': 0.625, 'step': 198},\n",
       "  {'loss': 1.9773683547973633, 'acc': 0.53125, 'step': 199},\n",
       "  {'loss': 1.9397367238998413, 'acc': 0.46875, 'step': 200},\n",
       "  {'loss': 1.9695513248443604, 'acc': 0.4375, 'step': 201},\n",
       "  {'loss': 1.9798370599746704, 'acc': 0.5, 'step': 202},\n",
       "  {'loss': 1.9914054870605469, 'acc': 0.59375, 'step': 203},\n",
       "  {'loss': 1.9336706399917603, 'acc': 0.5, 'step': 204},\n",
       "  {'loss': 2.0323357582092285, 'acc': 0.3125, 'step': 205},\n",
       "  {'loss': 1.9841902256011963, 'acc': 0.375, 'step': 206},\n",
       "  {'loss': 2.0228774547576904, 'acc': 0.375, 'step': 207},\n",
       "  {'loss': 1.9654017686843872, 'acc': 0.53125, 'step': 208},\n",
       "  {'loss': 1.9852226972579956, 'acc': 0.4375, 'step': 209},\n",
       "  {'loss': 1.9616092443466187, 'acc': 0.40625, 'step': 210},\n",
       "  {'loss': 1.9662330150604248, 'acc': 0.46875, 'step': 211},\n",
       "  {'loss': 1.9472154378890991, 'acc': 0.4375, 'step': 212},\n",
       "  {'loss': 1.9838247299194336, 'acc': 0.5, 'step': 213},\n",
       "  {'loss': 2.0252785682678223, 'acc': 0.46875, 'step': 214},\n",
       "  {'loss': 1.9969860315322876, 'acc': 0.4375, 'step': 215},\n",
       "  {'loss': 2.0102741718292236, 'acc': 0.40625, 'step': 216},\n",
       "  {'loss': 1.944574236869812, 'acc': 0.53125, 'step': 217},\n",
       "  {'loss': 1.9251428842544556, 'acc': 0.5625, 'step': 218},\n",
       "  {'loss': 1.889915943145752, 'acc': 0.5625, 'step': 219},\n",
       "  {'loss': 1.9589990377426147, 'acc': 0.375, 'step': 220},\n",
       "  {'loss': 1.8925286531448364, 'acc': 0.5625, 'step': 221},\n",
       "  {'loss': 1.9493417739868164, 'acc': 0.6875, 'step': 222},\n",
       "  {'loss': 1.903817057609558, 'acc': 0.4375, 'step': 223},\n",
       "  {'loss': 1.9179514646530151, 'acc': 0.46875, 'step': 224},\n",
       "  {'loss': 1.8926805257797241, 'acc': 0.625, 'step': 225},\n",
       "  {'loss': 1.8831735849380493, 'acc': 0.625, 'step': 226},\n",
       "  {'loss': 1.9252701997756958, 'acc': 0.5625, 'step': 227},\n",
       "  {'loss': 1.8788442611694336, 'acc': 0.59375, 'step': 228},\n",
       "  {'loss': 1.8532036542892456, 'acc': 0.46875, 'step': 229},\n",
       "  {'loss': 1.9385044574737549, 'acc': 0.46875, 'step': 230},\n",
       "  {'loss': 1.9165364503860474, 'acc': 0.53125, 'step': 231},\n",
       "  {'loss': 1.8883891105651855, 'acc': 0.5, 'step': 232},\n",
       "  {'loss': 1.8560858964920044, 'acc': 0.71875, 'step': 233},\n",
       "  {'loss': 1.9159626960754395, 'acc': 0.5, 'step': 234},\n",
       "  {'loss': 1.9046064615249634, 'acc': 0.5, 'step': 235},\n",
       "  {'loss': 1.8853518962860107, 'acc': 0.5625, 'step': 236},\n",
       "  {'loss': 1.8240272998809814, 'acc': 0.59375, 'step': 237},\n",
       "  {'loss': 1.8930836915969849, 'acc': 0.53125, 'step': 238},\n",
       "  {'loss': 1.8320599794387817, 'acc': 0.53125, 'step': 239},\n",
       "  {'loss': 1.9066863059997559, 'acc': 0.53125, 'step': 240},\n",
       "  {'loss': 1.8430007696151733, 'acc': 0.59375, 'step': 241},\n",
       "  {'loss': 1.8433845043182373, 'acc': 0.65625, 'step': 242},\n",
       "  {'loss': 1.868611454963684, 'acc': 0.59375, 'step': 243},\n",
       "  {'loss': 1.9113202095031738, 'acc': 0.53125, 'step': 244},\n",
       "  {'loss': 1.9823623895645142, 'acc': 0.46875, 'step': 245},\n",
       "  {'loss': 1.827483892440796, 'acc': 0.5625, 'step': 246},\n",
       "  {'loss': 1.8520464897155762, 'acc': 0.5625, 'step': 247},\n",
       "  {'loss': 1.8446732759475708, 'acc': 0.53125, 'step': 248},\n",
       "  {'loss': 1.887766718864441, 'acc': 0.5, 'step': 249},\n",
       "  {'loss': 1.7934777736663818, 'acc': 0.625, 'step': 250},\n",
       "  {'loss': 1.7156809568405151, 'acc': 0.65625, 'step': 251},\n",
       "  {'loss': 1.7283130884170532, 'acc': 0.6875, 'step': 252},\n",
       "  {'loss': 1.7488117218017578, 'acc': 0.5625, 'step': 253},\n",
       "  {'loss': 1.939414620399475, 'acc': 0.34375, 'step': 254},\n",
       "  {'loss': 1.7793431282043457, 'acc': 0.59375, 'step': 255},\n",
       "  {'loss': 1.8990663290023804, 'acc': 0.5, 'step': 256},\n",
       "  {'loss': 1.7925794124603271, 'acc': 0.5, 'step': 257},\n",
       "  {'loss': 1.77712881565094, 'acc': 0.5, 'step': 258},\n",
       "  {'loss': 1.8907736539840698, 'acc': 0.375, 'step': 259},\n",
       "  {'loss': 1.7463887929916382, 'acc': 0.5625, 'step': 260},\n",
       "  {'loss': 1.864482045173645, 'acc': 0.4375, 'step': 261},\n",
       "  {'loss': 1.7563742399215698, 'acc': 0.65625, 'step': 262},\n",
       "  {'loss': 1.8254914283752441, 'acc': 0.375, 'step': 263},\n",
       "  {'loss': 1.7739306688308716, 'acc': 0.53125, 'step': 264},\n",
       "  {'loss': 1.7259598970413208, 'acc': 0.5625, 'step': 265},\n",
       "  {'loss': 1.9570823907852173, 'acc': 0.375, 'step': 266},\n",
       "  {'loss': 1.8392016887664795, 'acc': 0.5, 'step': 267},\n",
       "  {'loss': 1.7484444379806519, 'acc': 0.6875, 'step': 268},\n",
       "  {'loss': 1.7216905355453491, 'acc': 0.625, 'step': 269},\n",
       "  {'loss': 1.7427698373794556, 'acc': 0.5, 'step': 270},\n",
       "  {'loss': 1.7198150157928467, 'acc': 0.53125, 'step': 271},\n",
       "  {'loss': 1.7509448528289795, 'acc': 0.625, 'step': 272},\n",
       "  {'loss': 1.739486575126648, 'acc': 0.59375, 'step': 273},\n",
       "  {'loss': 1.6811940670013428, 'acc': 0.65625, 'step': 274},\n",
       "  {'loss': 1.5949801206588745, 'acc': 0.6875, 'step': 275},\n",
       "  {'loss': 1.7304046154022217, 'acc': 0.59375, 'step': 276},\n",
       "  {'loss': 1.697916030883789, 'acc': 0.5, 'step': 277},\n",
       "  {'loss': 1.7665575742721558, 'acc': 0.59375, 'step': 278},\n",
       "  {'loss': 1.6207902431488037, 'acc': 0.6875, 'step': 279},\n",
       "  {'loss': 1.711543321609497, 'acc': 0.5, 'step': 280},\n",
       "  {'loss': 1.644699215888977, 'acc': 0.65625, 'step': 281},\n",
       "  {'loss': 1.7838680744171143, 'acc': 0.5, 'step': 282},\n",
       "  {'loss': 1.7473304271697998, 'acc': 0.53125, 'step': 283},\n",
       "  {'loss': 1.6773911714553833, 'acc': 0.75, 'step': 284},\n",
       "  {'loss': 1.5499104261398315, 'acc': 0.75, 'step': 285},\n",
       "  {'loss': 1.6874767541885376, 'acc': 0.59375, 'step': 286},\n",
       "  {'loss': 1.6392714977264404, 'acc': 0.53125, 'step': 287},\n",
       "  {'loss': 1.7561100721359253, 'acc': 0.40625, 'step': 288},\n",
       "  {'loss': 1.7157891988754272, 'acc': 0.4375, 'step': 289},\n",
       "  {'loss': 1.731467366218567, 'acc': 0.53125, 'step': 290},\n",
       "  {'loss': 1.7171533107757568, 'acc': 0.5625, 'step': 291},\n",
       "  {'loss': 1.7322007417678833, 'acc': 0.4375, 'step': 292},\n",
       "  {'loss': 1.7695704698562622, 'acc': 0.3125, 'step': 293},\n",
       "  {'loss': 1.654710054397583, 'acc': 0.5, 'step': 294},\n",
       "  {'loss': 1.6136902570724487, 'acc': 0.5, 'step': 295},\n",
       "  {'loss': 1.7658979892730713, 'acc': 0.40625, 'step': 296},\n",
       "  {'loss': 1.6558763980865479, 'acc': 0.46875, 'step': 297},\n",
       "  {'loss': 1.6223872900009155, 'acc': 0.40625, 'step': 298},\n",
       "  {'loss': 1.6258524656295776, 'acc': 0.59375, 'step': 299},\n",
       "  {'loss': 1.7724800109863281, 'acc': 0.34375, 'step': 300},\n",
       "  {'loss': 1.7977300882339478, 'acc': 0.28125, 'step': 301},\n",
       "  {'loss': 1.6731486320495605, 'acc': 0.46875, 'step': 302},\n",
       "  {'loss': 1.7112665176391602, 'acc': 0.4375, 'step': 303},\n",
       "  {'loss': 1.608019471168518, 'acc': 0.4375, 'step': 304},\n",
       "  {'loss': 1.6416622400283813, 'acc': 0.59375, 'step': 305},\n",
       "  {'loss': 1.7003254890441895, 'acc': 0.40625, 'step': 306},\n",
       "  {'loss': 1.7014858722686768, 'acc': 0.3125, 'step': 307},\n",
       "  {'loss': 1.6128116846084595, 'acc': 0.53125, 'step': 308},\n",
       "  {'loss': 1.4935938119888306, 'acc': 0.5625, 'step': 309},\n",
       "  {'loss': 1.663930058479309, 'acc': 0.4375, 'step': 310},\n",
       "  {'loss': 1.61571204662323, 'acc': 0.5, 'step': 311},\n",
       "  {'loss': 1.6246838569641113, 'acc': 0.4375, 'step': 312},\n",
       "  {'loss': 1.5518006086349487, 'acc': 0.59375, 'step': 313},\n",
       "  {'loss': 1.5834161043167114, 'acc': 0.5, 'step': 314},\n",
       "  {'loss': 1.5108269453048706, 'acc': 0.65625, 'step': 315},\n",
       "  {'loss': 1.6089260578155518, 'acc': 0.53125, 'step': 316},\n",
       "  {'loss': 1.5286189317703247, 'acc': 0.625, 'step': 317},\n",
       "  {'loss': 1.5297335386276245, 'acc': 0.65625, 'step': 318},\n",
       "  {'loss': 1.6460189819335938, 'acc': 0.375, 'step': 319},\n",
       "  {'loss': 1.5783940553665161, 'acc': 0.59375, 'step': 320},\n",
       "  {'loss': 1.6132452487945557, 'acc': 0.5, 'step': 321},\n",
       "  {'loss': 1.5961248874664307, 'acc': 0.40625, 'step': 322},\n",
       "  {'loss': 1.6369303464889526, 'acc': 0.40625, 'step': 323},\n",
       "  {'loss': 1.5942047834396362, 'acc': 0.4375, 'step': 324},\n",
       "  {'loss': 1.5102903842926025, 'acc': 0.46875, 'step': 325},\n",
       "  {'loss': 1.566918969154358, 'acc': 0.46875, 'step': 326},\n",
       "  {'loss': 1.3754572868347168, 'acc': 0.75, 'step': 327},\n",
       "  {'loss': 1.6504346132278442, 'acc': 0.40625, 'step': 328},\n",
       "  {'loss': 1.552374243736267, 'acc': 0.625, 'step': 329},\n",
       "  {'loss': 1.4431509971618652, 'acc': 0.59375, 'step': 330},\n",
       "  {'loss': 1.5193166732788086, 'acc': 0.46875, 'step': 331},\n",
       "  {'loss': 1.6072074174880981, 'acc': 0.34375, 'step': 332},\n",
       "  {'loss': 1.6929484605789185, 'acc': 0.375, 'step': 333},\n",
       "  {'loss': 1.5357640981674194, 'acc': 0.53125, 'step': 334},\n",
       "  {'loss': 1.4147762060165405, 'acc': 0.75, 'step': 335},\n",
       "  {'loss': 1.5359258651733398, 'acc': 0.40625, 'step': 336},\n",
       "  {'loss': 1.4309898614883423, 'acc': 0.59375, 'step': 337},\n",
       "  {'loss': 1.5391877889633179, 'acc': 0.4375, 'step': 338},\n",
       "  {'loss': 1.4562331438064575, 'acc': 0.65625, 'step': 339},\n",
       "  {'loss': 1.3480744361877441, 'acc': 0.71875, 'step': 340},\n",
       "  {'loss': 1.6773271560668945, 'acc': 0.375, 'step': 341},\n",
       "  {'loss': 1.4384514093399048, 'acc': 0.625, 'step': 342},\n",
       "  {'loss': 1.731278896331787, 'acc': 0.34375, 'step': 343},\n",
       "  {'loss': 1.4795303344726562, 'acc': 0.4375, 'step': 344},\n",
       "  {'loss': 1.4291937351226807, 'acc': 0.46875, 'step': 345},\n",
       "  {'loss': 1.5180306434631348, 'acc': 0.46875, 'step': 346},\n",
       "  {'loss': 1.5063339471817017, 'acc': 0.53125, 'step': 347},\n",
       "  {'loss': 1.5415682792663574, 'acc': 0.4375, 'step': 348},\n",
       "  {'loss': 1.5450657606124878, 'acc': 0.46875, 'step': 349},\n",
       "  {'loss': 1.388429045677185, 'acc': 0.5, 'step': 350},\n",
       "  {'loss': 1.4470043182373047, 'acc': 0.53125, 'step': 351},\n",
       "  {'loss': 1.5119414329528809, 'acc': 0.4375, 'step': 352},\n",
       "  {'loss': 1.4734700918197632, 'acc': 0.46875, 'step': 353},\n",
       "  {'loss': 1.407097578048706, 'acc': 0.53125, 'step': 354},\n",
       "  {'loss': 1.5545834302902222, 'acc': 0.375, 'step': 355},\n",
       "  {'loss': 1.4139260053634644, 'acc': 0.65625, 'step': 356},\n",
       "  {'loss': 1.5186017751693726, 'acc': 0.40625, 'step': 357},\n",
       "  {'loss': 1.6011449098587036, 'acc': 0.4375, 'step': 358},\n",
       "  {'loss': 1.5518122911453247, 'acc': 0.4375, 'step': 359},\n",
       "  {'loss': 1.5414282083511353, 'acc': 0.5, 'step': 360},\n",
       "  {'loss': 1.6070842742919922, 'acc': 0.40625, 'step': 361},\n",
       "  {'loss': 1.6142107248306274, 'acc': 0.40625, 'step': 362},\n",
       "  {'loss': 1.4961202144622803, 'acc': 0.4375, 'step': 363},\n",
       "  {'loss': 1.33525550365448, 'acc': 0.59375, 'step': 364},\n",
       "  {'loss': 1.4361355304718018, 'acc': 0.59375, 'step': 365},\n",
       "  {'loss': 1.466736078262329, 'acc': 0.4375, 'step': 366},\n",
       "  {'loss': 1.4405544996261597, 'acc': 0.5, 'step': 367},\n",
       "  {'loss': 1.490987777709961, 'acc': 0.4375, 'step': 368},\n",
       "  {'loss': 1.3409470319747925, 'acc': 0.6875, 'step': 369},\n",
       "  {'loss': 1.4093562364578247, 'acc': 0.53125, 'step': 370},\n",
       "  {'loss': 1.492922067642212, 'acc': 0.5, 'step': 371},\n",
       "  {'loss': 1.472860336303711, 'acc': 0.5, 'step': 372},\n",
       "  {'loss': 1.3310703039169312, 'acc': 0.59375, 'step': 373},\n",
       "  {'loss': 1.3191713094711304, 'acc': 0.625, 'step': 374},\n",
       "  {'loss': 1.3747193813323975, 'acc': 0.59375, 'step': 375},\n",
       "  {'loss': 1.3998252153396606, 'acc': 0.5625, 'step': 376},\n",
       "  {'loss': 1.521260380744934, 'acc': 0.46875, 'step': 377},\n",
       "  {'loss': 1.334364652633667, 'acc': 0.625, 'step': 378},\n",
       "  {'loss': 1.304583191871643, 'acc': 0.59375, 'step': 379},\n",
       "  {'loss': 1.3513013124465942, 'acc': 0.65625, 'step': 380},\n",
       "  {'loss': 1.4915871620178223, 'acc': 0.5, 'step': 381},\n",
       "  {'loss': 1.4968688488006592, 'acc': 0.4375, 'step': 382},\n",
       "  {'loss': 1.272405743598938, 'acc': 0.8125, 'step': 383},\n",
       "  {'loss': 1.314340591430664, 'acc': 0.65625, 'step': 384},\n",
       "  {'loss': 1.40360426902771, 'acc': 0.59375, 'step': 385},\n",
       "  {'loss': 1.6037589311599731, 'acc': 0.53125, 'step': 386},\n",
       "  {'loss': 1.3995859622955322, 'acc': 0.5, 'step': 387},\n",
       "  {'loss': 1.3644142150878906, 'acc': 0.6875, 'step': 388},\n",
       "  {'loss': 1.2530745267868042, 'acc': 0.6875, 'step': 389},\n",
       "  {'loss': 1.5868135690689087, 'acc': 0.4375, 'step': 390},\n",
       "  {'loss': 1.3646758794784546, 'acc': 0.5625, 'step': 391},\n",
       "  {'loss': 1.4259470701217651, 'acc': 0.5, 'step': 392},\n",
       "  {'loss': 1.3460949659347534, 'acc': 0.5625, 'step': 393},\n",
       "  {'loss': 1.302645206451416, 'acc': 0.59375, 'step': 394},\n",
       "  {'loss': 1.2134884595870972, 'acc': 0.65625, 'step': 395},\n",
       "  {'loss': 1.4465219974517822, 'acc': 0.53125, 'step': 396},\n",
       "  {'loss': 1.4480277299880981, 'acc': 0.5, 'step': 397},\n",
       "  {'loss': 1.4613162279129028, 'acc': 0.46875, 'step': 398},\n",
       "  {'loss': 1.2374496459960938, 'acc': 0.65625, 'step': 399},\n",
       "  {'loss': 1.2857129573822021, 'acc': 0.5625, 'step': 400},\n",
       "  {'loss': 1.3633201122283936, 'acc': 0.5625, 'step': 401},\n",
       "  {'loss': 1.3379722833633423, 'acc': 0.53125, 'step': 402},\n",
       "  {'loss': 1.306092619895935, 'acc': 0.59375, 'step': 403},\n",
       "  {'loss': 1.323241114616394, 'acc': 0.46875, 'step': 404},\n",
       "  {'loss': 1.3022297620773315, 'acc': 0.59375, 'step': 405},\n",
       "  {'loss': 1.3263169527053833, 'acc': 0.625, 'step': 406},\n",
       "  {'loss': 1.3233239650726318, 'acc': 0.625, 'step': 407},\n",
       "  {'loss': 1.3175832033157349, 'acc': 0.625, 'step': 408},\n",
       "  {'loss': 1.381198525428772, 'acc': 0.59375, 'step': 409},\n",
       "  {'loss': 1.3166279792785645, 'acc': 0.5625, 'step': 410},\n",
       "  {'loss': 1.4162602424621582, 'acc': 0.5, 'step': 411},\n",
       "  {'loss': 1.4822300672531128, 'acc': 0.53125, 'step': 412},\n",
       "  {'loss': 1.4178359508514404, 'acc': 0.59375, 'step': 413},\n",
       "  {'loss': 1.2761380672454834, 'acc': 0.6875, 'step': 414},\n",
       "  {'loss': 1.338119626045227, 'acc': 0.65625, 'step': 415},\n",
       "  {'loss': 1.319082260131836, 'acc': 0.65625, 'step': 416},\n",
       "  {'loss': 1.3826180696487427, 'acc': 0.59375, 'step': 417},\n",
       "  {'loss': 1.145121693611145, 'acc': 0.71875, 'step': 418},\n",
       "  {'loss': 1.3979644775390625, 'acc': 0.5, 'step': 419},\n",
       "  {'loss': 1.3391276597976685, 'acc': 0.53125, 'step': 420},\n",
       "  {'loss': 1.3333760499954224, 'acc': 0.6875, 'step': 421},\n",
       "  {'loss': 1.2761374711990356, 'acc': 0.59375, 'step': 422},\n",
       "  {'loss': 1.2429999113082886, 'acc': 0.59375, 'step': 423},\n",
       "  {'loss': 1.406870722770691, 'acc': 0.5625, 'step': 424},\n",
       "  {'loss': 1.3262131214141846, 'acc': 0.59375, 'step': 425},\n",
       "  {'loss': 1.1557666063308716, 'acc': 0.71875, 'step': 426},\n",
       "  {'loss': 1.3325586318969727, 'acc': 0.40625, 'step': 427},\n",
       "  {'loss': 1.2841534614562988, 'acc': 0.53125, 'step': 428},\n",
       "  {'loss': 1.3000669479370117, 'acc': 0.59375, 'step': 429},\n",
       "  {'loss': 1.4182426929473877, 'acc': 0.4375, 'step': 430},\n",
       "  {'loss': 1.2304383516311646, 'acc': 0.625, 'step': 431},\n",
       "  {'loss': 1.2543590068817139, 'acc': 0.625, 'step': 432},\n",
       "  {'loss': 1.4986090660095215, 'acc': 0.5, 'step': 433},\n",
       "  {'loss': 1.309288740158081, 'acc': 0.59375, 'step': 434},\n",
       "  {'loss': 1.2635339498519897, 'acc': 0.59375, 'step': 435},\n",
       "  {'loss': 1.3921258449554443, 'acc': 0.53125, 'step': 436},\n",
       "  {'loss': 1.3039140701293945, 'acc': 0.65625, 'step': 437},\n",
       "  {'loss': 1.31259286403656, 'acc': 0.625, 'step': 438},\n",
       "  {'loss': 1.2045177221298218, 'acc': 0.65625, 'step': 439},\n",
       "  {'loss': 1.3013650178909302, 'acc': 0.59375, 'step': 440},\n",
       "  {'loss': 1.2970973253250122, 'acc': 0.625, 'step': 441},\n",
       "  {'loss': 1.457095742225647, 'acc': 0.5625, 'step': 442},\n",
       "  {'loss': 1.3039500713348389, 'acc': 0.46875, 'step': 443},\n",
       "  {'loss': 1.3337180614471436, 'acc': 0.625, 'step': 444},\n",
       "  {'loss': 1.347017526626587, 'acc': 0.625, 'step': 445},\n",
       "  {'loss': 1.1796505451202393, 'acc': 0.625, 'step': 446},\n",
       "  {'loss': 1.3015246391296387, 'acc': 0.625, 'step': 447},\n",
       "  {'loss': 1.400883436203003, 'acc': 0.5, 'step': 448},\n",
       "  {'loss': 1.3034694194793701, 'acc': 0.59375, 'step': 449},\n",
       "  {'loss': 1.3646107912063599, 'acc': 0.625, 'step': 450},\n",
       "  {'loss': 1.3304526805877686, 'acc': 0.59375, 'step': 451},\n",
       "  {'loss': 1.217159390449524, 'acc': 0.71875, 'step': 452},\n",
       "  {'loss': 1.3119301795959473, 'acc': 0.59375, 'step': 453},\n",
       "  {'loss': 1.3235477209091187, 'acc': 0.5, 'step': 454},\n",
       "  {'loss': 1.3334174156188965, 'acc': 0.46875, 'step': 455},\n",
       "  {'loss': 1.4210737943649292, 'acc': 0.65625, 'step': 456},\n",
       "  {'loss': 1.4642629623413086, 'acc': 0.46875, 'step': 457},\n",
       "  {'loss': 1.324852466583252, 'acc': 0.6875, 'step': 458},\n",
       "  {'loss': 1.142575740814209, 'acc': 0.78125, 'step': 459},\n",
       "  {'loss': 1.2926571369171143, 'acc': 0.5, 'step': 460},\n",
       "  {'loss': 1.3090314865112305, 'acc': 0.5625, 'step': 461},\n",
       "  {'loss': 1.4834221601486206, 'acc': 0.5, 'step': 462},\n",
       "  {'loss': 1.123410940170288, 'acc': 0.65625, 'step': 463},\n",
       "  {'loss': 1.356157898902893, 'acc': 0.53125, 'step': 464},\n",
       "  {'loss': 1.150933861732483, 'acc': 0.6875, 'step': 465},\n",
       "  {'loss': 1.203000783920288, 'acc': 0.59375, 'step': 466},\n",
       "  {'loss': 1.2644729614257812, 'acc': 0.5625, 'step': 467},\n",
       "  {'loss': 1.290074348449707, 'acc': 0.6875, 'step': 468},\n",
       "  {'loss': 1.2282969951629639, 'acc': 0.625, 'step': 469},\n",
       "  {'loss': 1.2804971933364868, 'acc': 0.46875, 'step': 470},\n",
       "  {'loss': 1.3318703174591064, 'acc': 0.53125, 'step': 471},\n",
       "  {'loss': 1.3641066551208496, 'acc': 0.59375, 'step': 472},\n",
       "  {'loss': 1.39201819896698, 'acc': 0.71875, 'step': 473},\n",
       "  {'loss': 1.3138320446014404, 'acc': 0.46875, 'step': 474},\n",
       "  {'loss': 1.2703958749771118, 'acc': 0.59375, 'step': 475},\n",
       "  {'loss': 1.2294889688491821, 'acc': 0.625, 'step': 476},\n",
       "  {'loss': 1.1811327934265137, 'acc': 0.75, 'step': 477},\n",
       "  {'loss': 1.1328682899475098, 'acc': 0.6875, 'step': 478},\n",
       "  {'loss': 1.2028461694717407, 'acc': 0.65625, 'step': 479},\n",
       "  {'loss': 1.238349199295044, 'acc': 0.5625, 'step': 480},\n",
       "  {'loss': 1.137722134590149, 'acc': 0.5625, 'step': 481},\n",
       "  {'loss': 1.1986209154129028, 'acc': 0.625, 'step': 482},\n",
       "  {'loss': 1.2580692768096924, 'acc': 0.59375, 'step': 483},\n",
       "  {'loss': 1.2046624422073364, 'acc': 0.65625, 'step': 484},\n",
       "  {'loss': 1.2340272665023804, 'acc': 0.5625, 'step': 485},\n",
       "  {'loss': 1.319287657737732, 'acc': 0.65625, 'step': 486},\n",
       "  {'loss': 1.2228195667266846, 'acc': 0.5, 'step': 487},\n",
       "  {'loss': 1.1645145416259766, 'acc': 0.78125, 'step': 488},\n",
       "  {'loss': 1.1318061351776123, 'acc': 0.65625, 'step': 489},\n",
       "  {'loss': 1.2884029150009155, 'acc': 0.46875, 'step': 490},\n",
       "  {'loss': 1.1919978857040405, 'acc': 0.71875, 'step': 491},\n",
       "  {'loss': 1.232662320137024, 'acc': 0.5625, 'step': 492},\n",
       "  {'loss': 1.1863611936569214, 'acc': 0.625, 'step': 493},\n",
       "  {'loss': 1.2102832794189453, 'acc': 0.5, 'step': 494},\n",
       "  {'loss': 1.2135224342346191, 'acc': 0.625, 'step': 495},\n",
       "  {'loss': 1.053990364074707, 'acc': 0.6875, 'step': 496},\n",
       "  {'loss': 1.430343747138977, 'acc': 0.46875, 'step': 497},\n",
       "  {'loss': 1.4932539463043213, 'acc': 0.5, 'step': 498},\n",
       "  {'loss': 1.1080527305603027, 'acc': 0.59375, 'step': 499},\n",
       "  {'loss': 1.1765611171722412, 'acc': 0.5625, 'step': 500},\n",
       "  {'loss': 1.2978487014770508, 'acc': 0.5, 'step': 501},\n",
       "  {'loss': 1.0718196630477905, 'acc': 0.625, 'step': 502},\n",
       "  {'loss': 1.302765965461731, 'acc': 0.4375, 'step': 503},\n",
       "  {'loss': 1.0191303491592407, 'acc': 0.65625, 'step': 504},\n",
       "  {'loss': 1.246264100074768, 'acc': 0.40625, 'step': 505},\n",
       "  {'loss': 1.151655673980713, 'acc': 0.78125, 'step': 506},\n",
       "  {'loss': 1.232517123222351, 'acc': 0.5625, 'step': 507},\n",
       "  {'loss': 1.0634812116622925, 'acc': 0.625, 'step': 508},\n",
       "  {'loss': 1.3804631233215332, 'acc': 0.59375, 'step': 509},\n",
       "  {'loss': 1.1807496547698975, 'acc': 0.65625, 'step': 510},\n",
       "  {'loss': 1.1030863523483276, 'acc': 0.65625, 'step': 511},\n",
       "  {'loss': 1.166198968887329, 'acc': 0.5, 'step': 512},\n",
       "  {'loss': 1.196140170097351, 'acc': 0.5625, 'step': 513},\n",
       "  {'loss': 1.143162488937378, 'acc': 0.6875, 'step': 514},\n",
       "  {'loss': 1.204484224319458, 'acc': 0.5625, 'step': 515},\n",
       "  {'loss': 1.0968490839004517, 'acc': 0.6875, 'step': 516},\n",
       "  {'loss': 1.0285382270812988, 'acc': 0.8125, 'step': 517},\n",
       "  {'loss': 1.1208354234695435, 'acc': 0.65625, 'step': 518},\n",
       "  {'loss': 1.0179253816604614, 'acc': 0.6875, 'step': 519},\n",
       "  {'loss': 1.143506407737732, 'acc': 0.59375, 'step': 520},\n",
       "  {'loss': 1.1437987089157104, 'acc': 0.625, 'step': 521},\n",
       "  {'loss': 1.3967617750167847, 'acc': 0.40625, 'step': 522},\n",
       "  {'loss': 1.0434144735336304, 'acc': 0.71875, 'step': 523},\n",
       "  {'loss': 1.121962547302246, 'acc': 0.53125, 'step': 524},\n",
       "  {'loss': 1.0987398624420166, 'acc': 0.5625, 'step': 525},\n",
       "  {'loss': 1.2088658809661865, 'acc': 0.5625, 'step': 526},\n",
       "  {'loss': 1.2529832124710083, 'acc': 0.65625, 'step': 527},\n",
       "  {'loss': 1.1149499416351318, 'acc': 0.6875, 'step': 528},\n",
       "  {'loss': 0.8577927947044373, 'acc': 0.875, 'step': 529},\n",
       "  {'loss': 1.147434949874878, 'acc': 0.59375, 'step': 530},\n",
       "  {'loss': 1.2139745950698853, 'acc': 0.6875, 'step': 531},\n",
       "  {'loss': 1.0808054208755493, 'acc': 0.75, 'step': 532},\n",
       "  {'loss': 1.1278595924377441, 'acc': 0.71875, 'step': 533},\n",
       "  {'loss': 1.2295441627502441, 'acc': 0.53125, 'step': 534},\n",
       "  {'loss': 1.1041531562805176, 'acc': 0.75, 'step': 535},\n",
       "  {'loss': 1.3426530361175537, 'acc': 0.53125, 'step': 536},\n",
       "  {'loss': 1.2405599355697632, 'acc': 0.65625, 'step': 537},\n",
       "  {'loss': 1.2202486991882324, 'acc': 0.65625, 'step': 538},\n",
       "  {'loss': 1.192073106765747, 'acc': 0.625, 'step': 539},\n",
       "  {'loss': 1.0171869993209839, 'acc': 0.6875, 'step': 540},\n",
       "  {'loss': 1.3513286113739014, 'acc': 0.53125, 'step': 541},\n",
       "  {'loss': 0.9269778728485107, 'acc': 0.75, 'step': 542},\n",
       "  {'loss': 1.2740483283996582, 'acc': 0.5625, 'step': 543},\n",
       "  {'loss': 1.3754810094833374, 'acc': 0.46875, 'step': 544},\n",
       "  {'loss': 1.0474247932434082, 'acc': 0.75, 'step': 545},\n",
       "  {'loss': 1.1378997564315796, 'acc': 0.59375, 'step': 546},\n",
       "  {'loss': 1.310726523399353, 'acc': 0.4375, 'step': 547},\n",
       "  {'loss': 1.1789010763168335, 'acc': 0.6875, 'step': 548},\n",
       "  {'loss': 1.0104475021362305, 'acc': 0.71875, 'step': 549},\n",
       "  {'loss': 1.0412452220916748, 'acc': 0.71875, 'step': 550},\n",
       "  {'loss': 1.071523666381836, 'acc': 0.59375, 'step': 551},\n",
       "  {'loss': 1.2189981937408447, 'acc': 0.65625, 'step': 552},\n",
       "  {'loss': 1.0699468851089478, 'acc': 0.625, 'step': 553},\n",
       "  {'loss': 1.05381178855896, 'acc': 0.71875, 'step': 554},\n",
       "  {'loss': 1.2142267227172852, 'acc': 0.59375, 'step': 555},\n",
       "  {'loss': 1.1946561336517334, 'acc': 0.53125, 'step': 556},\n",
       "  {'loss': 1.1088777780532837, 'acc': 0.65625, 'step': 557},\n",
       "  {'loss': 1.0383102893829346, 'acc': 0.65625, 'step': 558},\n",
       "  {'loss': 1.1808106899261475, 'acc': 0.53125, 'step': 559},\n",
       "  {'loss': 1.0122214555740356, 'acc': 0.75, 'step': 560},\n",
       "  {'loss': 1.070078730583191, 'acc': 0.71875, 'step': 561},\n",
       "  {'loss': 0.997086226940155, 'acc': 0.65625, 'step': 562},\n",
       "  {'loss': 1.1269694566726685, 'acc': 0.59375, 'step': 563},\n",
       "  {'loss': 1.0790293216705322, 'acc': 0.6875, 'step': 564},\n",
       "  {'loss': 1.0736082792282104, 'acc': 0.5625, 'step': 565},\n",
       "  {'loss': 1.1870055198669434, 'acc': 0.65625, 'step': 566},\n",
       "  {'loss': 1.035741925239563, 'acc': 0.65625, 'step': 567},\n",
       "  {'loss': 1.0117180347442627, 'acc': 0.71875, 'step': 568},\n",
       "  {'loss': 1.141392707824707, 'acc': 0.59375, 'step': 569},\n",
       "  {'loss': 1.1365511417388916, 'acc': 0.53125, 'step': 570},\n",
       "  {'loss': 1.1465425491333008, 'acc': 0.75, 'step': 571},\n",
       "  {'loss': 1.1169304847717285, 'acc': 0.59375, 'step': 572},\n",
       "  {'loss': 1.1920583248138428, 'acc': 0.65625, 'step': 573},\n",
       "  {'loss': 1.3167363405227661, 'acc': 0.34375, 'step': 574},\n",
       "  {'loss': 1.0429394245147705, 'acc': 0.625, 'step': 575},\n",
       "  {'loss': 1.1511390209197998, 'acc': 0.5625, 'step': 576},\n",
       "  {'loss': 1.0864827632904053, 'acc': 0.59375, 'step': 577},\n",
       "  {'loss': 1.1673905849456787, 'acc': 0.625, 'step': 578},\n",
       "  {'loss': 1.042829990386963, 'acc': 0.65625, 'step': 579},\n",
       "  {'loss': 1.1069003343582153, 'acc': 0.625, 'step': 580},\n",
       "  {'loss': 1.0960981845855713, 'acc': 0.625, 'step': 581},\n",
       "  {'loss': 1.1578630208969116, 'acc': 0.71875, 'step': 582},\n",
       "  {'loss': 1.0347846746444702, 'acc': 0.65625, 'step': 583},\n",
       "  {'loss': 1.0068035125732422, 'acc': 0.625, 'step': 584},\n",
       "  {'loss': 0.9365930557250977, 'acc': 0.75, 'step': 585},\n",
       "  {'loss': 1.1211289167404175, 'acc': 0.71875, 'step': 586},\n",
       "  {'loss': 1.233583688735962, 'acc': 0.5625, 'step': 587},\n",
       "  {'loss': 1.2395598888397217, 'acc': 0.59375, 'step': 588},\n",
       "  {'loss': 1.0649127960205078, 'acc': 0.625, 'step': 589},\n",
       "  {'loss': 0.9931597709655762, 'acc': 0.6875, 'step': 590},\n",
       "  {'loss': 0.8959650993347168, 'acc': 0.6875, 'step': 591},\n",
       "  {'loss': 1.09421968460083, 'acc': 0.59375, 'step': 592},\n",
       "  {'loss': 1.0799895524978638, 'acc': 0.53125, 'step': 593},\n",
       "  {'loss': 1.027673363685608, 'acc': 0.59375, 'step': 594},\n",
       "  {'loss': 1.078561544418335, 'acc': 0.65625, 'step': 595},\n",
       "  {'loss': 1.0296311378479004, 'acc': 0.625, 'step': 596},\n",
       "  {'loss': 0.9868716597557068, 'acc': 0.625, 'step': 597},\n",
       "  {'loss': 0.9733811020851135, 'acc': 0.78125, 'step': 598},\n",
       "  {'loss': 1.3339334726333618, 'acc': 0.5625, 'step': 599},\n",
       "  {'loss': 0.9983274340629578, 'acc': 0.6875, 'step': 600},\n",
       "  {'loss': 1.3778777122497559, 'acc': 0.5625, 'step': 601},\n",
       "  {'loss': 0.8596948385238647, 'acc': 0.6875, 'step': 602},\n",
       "  {'loss': 1.0650336742401123, 'acc': 0.6875, 'step': 603},\n",
       "  {'loss': 1.0745052099227905, 'acc': 0.65625, 'step': 604},\n",
       "  {'loss': 1.2107676267623901, 'acc': 0.53125, 'step': 605},\n",
       "  {'loss': 1.0588798522949219, 'acc': 0.6875, 'step': 606},\n",
       "  {'loss': 0.9610598087310791, 'acc': 0.65625, 'step': 607},\n",
       "  {'loss': 1.3735945224761963, 'acc': 0.5, 'step': 608},\n",
       "  {'loss': 1.0332598686218262, 'acc': 0.59375, 'step': 609},\n",
       "  {'loss': 1.07249116897583, 'acc': 0.59375, 'step': 610},\n",
       "  {'loss': 1.0607560873031616, 'acc': 0.6875, 'step': 611},\n",
       "  {'loss': 0.9609720706939697, 'acc': 0.71875, 'step': 612},\n",
       "  {'loss': 1.029816746711731, 'acc': 0.59375, 'step': 613},\n",
       "  {'loss': 0.9408729076385498, 'acc': 0.6875, 'step': 614},\n",
       "  {'loss': 1.0164910554885864, 'acc': 0.75, 'step': 615},\n",
       "  {'loss': 1.164516806602478, 'acc': 0.5, 'step': 616},\n",
       "  {'loss': 0.9257783889770508, 'acc': 0.6875, 'step': 617},\n",
       "  {'loss': 1.0252329111099243, 'acc': 0.625, 'step': 618},\n",
       "  {'loss': 1.035283088684082, 'acc': 0.65625, 'step': 619},\n",
       "  {'loss': 0.9825981259346008, 'acc': 0.59375, 'step': 620},\n",
       "  {'loss': 1.3272900581359863, 'acc': 0.375, 'step': 621},\n",
       "  {'loss': 0.941422164440155, 'acc': 0.75, 'step': 622},\n",
       "  {'loss': 1.1199012994766235, 'acc': 0.53125, 'step': 623},\n",
       "  {'loss': 1.0951955318450928, 'acc': 0.625, 'step': 624},\n",
       "  {'loss': 1.0662016868591309, 'acc': 0.5, 'step': 625},\n",
       "  {'loss': 0.9756337404251099, 'acc': 0.65625, 'step': 626},\n",
       "  {'loss': 1.2187694311141968, 'acc': 0.53125, 'step': 627},\n",
       "  {'loss': 1.295763611793518, 'acc': 0.4375, 'step': 628},\n",
       "  {'loss': 1.2179652452468872, 'acc': 0.5, 'step': 629},\n",
       "  {'loss': 0.8996553421020508, 'acc': 0.65625, 'step': 630},\n",
       "  {'loss': 0.8838322758674622, 'acc': 0.8125, 'step': 631},\n",
       "  {'loss': 1.0522538423538208, 'acc': 0.59375, 'step': 632},\n",
       "  {'loss': 0.9853498339653015, 'acc': 0.71875, 'step': 633},\n",
       "  {'loss': 1.0623729228973389, 'acc': 0.5625, 'step': 634},\n",
       "  {'loss': 0.9890273809432983, 'acc': 0.59375, 'step': 635},\n",
       "  {'loss': 0.8811494708061218, 'acc': 0.625, 'step': 636},\n",
       "  {'loss': 0.9938976764678955, 'acc': 0.6875, 'step': 637},\n",
       "  {'loss': 1.1728785037994385, 'acc': 0.625, 'step': 638},\n",
       "  {'loss': 0.9857749938964844, 'acc': 0.625, 'step': 639},\n",
       "  {'loss': 1.000248908996582, 'acc': 0.78125, 'step': 640},\n",
       "  {'loss': 0.8830513954162598, 'acc': 0.71875, 'step': 641},\n",
       "  {'loss': 0.9785623550415039, 'acc': 0.75, 'step': 642},\n",
       "  {'loss': 1.080194354057312, 'acc': 0.625, 'step': 643},\n",
       "  {'loss': 1.2437511682510376, 'acc': 0.625, 'step': 644},\n",
       "  {'loss': 1.02426278591156, 'acc': 0.53125, 'step': 645},\n",
       "  {'loss': 0.9490662217140198, 'acc': 0.71875, 'step': 646},\n",
       "  {'loss': 0.8947185277938843, 'acc': 0.75, 'step': 647},\n",
       "  {'loss': 1.0097510814666748, 'acc': 0.625, 'step': 648},\n",
       "  {'loss': 1.0113691091537476, 'acc': 0.65625, 'step': 649},\n",
       "  {'loss': 1.0361039638519287, 'acc': 0.65625, 'step': 650},\n",
       "  {'loss': 1.1108871698379517, 'acc': 0.71875, 'step': 651},\n",
       "  {'loss': 0.9495653510093689, 'acc': 0.6875, 'step': 652},\n",
       "  {'loss': 1.2132984399795532, 'acc': 0.53125, 'step': 653},\n",
       "  {'loss': 0.903157114982605, 'acc': 0.75, 'step': 654},\n",
       "  {'loss': 0.9379976391792297, 'acc': 0.75, 'step': 655},\n",
       "  {'loss': 1.0086623430252075, 'acc': 0.6875, 'step': 656},\n",
       "  {'loss': 1.137341022491455, 'acc': 0.59375, 'step': 657},\n",
       "  {'loss': 1.1411064863204956, 'acc': 0.625, 'step': 658},\n",
       "  {'loss': 0.9631739258766174, 'acc': 0.71875, 'step': 659},\n",
       "  {'loss': 1.2419719696044922, 'acc': 0.5, 'step': 660},\n",
       "  {'loss': 1.0063116550445557, 'acc': 0.65625, 'step': 661},\n",
       "  {'loss': 0.8364933133125305, 'acc': 0.6875, 'step': 662},\n",
       "  {'loss': 1.1193205118179321, 'acc': 0.59375, 'step': 663},\n",
       "  {'loss': 0.9601534008979797, 'acc': 0.625, 'step': 664},\n",
       "  {'loss': 1.0574688911437988, 'acc': 0.6875, 'step': 665},\n",
       "  {'loss': 1.1872859001159668, 'acc': 0.5625, 'step': 666},\n",
       "  {'loss': 0.7563561201095581, 'acc': 0.75, 'step': 667},\n",
       "  {'loss': 0.8945269584655762, 'acc': 0.71875, 'step': 668},\n",
       "  {'loss': 1.0684165954589844, 'acc': 0.4375, 'step': 669},\n",
       "  {'loss': 0.9528018832206726, 'acc': 0.59375, 'step': 670},\n",
       "  {'loss': 1.2478594779968262, 'acc': 0.5, 'step': 671},\n",
       "  {'loss': 1.0283719301223755, 'acc': 0.59375, 'step': 672},\n",
       "  {'loss': 1.10042142868042, 'acc': 0.5625, 'step': 673},\n",
       "  {'loss': 0.9792105555534363, 'acc': 0.625, 'step': 674},\n",
       "  {'loss': 0.9733744859695435, 'acc': 0.6875, 'step': 675},\n",
       "  {'loss': 0.8904001116752625, 'acc': 0.6875, 'step': 676},\n",
       "  {'loss': 0.8060040473937988, 'acc': 0.71875, 'step': 677},\n",
       "  {'loss': 0.9982250928878784, 'acc': 0.65625, 'step': 678},\n",
       "  {'loss': 1.1850835084915161, 'acc': 0.65625, 'step': 679},\n",
       "  {'loss': 0.9519352912902832, 'acc': 0.625, 'step': 680},\n",
       "  {'loss': 1.011319875717163, 'acc': 0.75, 'step': 681},\n",
       "  {'loss': 0.9884554147720337, 'acc': 0.625, 'step': 682},\n",
       "  {'loss': 0.9693010449409485, 'acc': 0.625, 'step': 683},\n",
       "  {'loss': 0.8838170170783997, 'acc': 0.6875, 'step': 684},\n",
       "  {'loss': 0.8984529376029968, 'acc': 0.65625, 'step': 685},\n",
       "  {'loss': 1.1384174823760986, 'acc': 0.5625, 'step': 686},\n",
       "  {'loss': 0.8286425471305847, 'acc': 0.78125, 'step': 687},\n",
       "  {'loss': 0.797598123550415, 'acc': 0.65625, 'step': 688},\n",
       "  {'loss': 1.043529748916626, 'acc': 0.59375, 'step': 689},\n",
       "  {'loss': 1.0246524810791016, 'acc': 0.53125, 'step': 690},\n",
       "  {'loss': 1.123369812965393, 'acc': 0.5, 'step': 691},\n",
       "  {'loss': 1.022402048110962, 'acc': 0.5625, 'step': 692},\n",
       "  {'loss': 1.1179879903793335, 'acc': 0.4375, 'step': 693},\n",
       "  {'loss': 1.1983201503753662, 'acc': 0.5, 'step': 694},\n",
       "  {'loss': 1.0753397941589355, 'acc': 0.71875, 'step': 695},\n",
       "  {'loss': 1.0237538814544678, 'acc': 0.6875, 'step': 696},\n",
       "  {'loss': 1.1386144161224365, 'acc': 0.6875, 'step': 697},\n",
       "  {'loss': 1.2740086317062378, 'acc': 0.46875, 'step': 698},\n",
       "  {'loss': 1.214105486869812, 'acc': 0.5, 'step': 699},\n",
       "  {'loss': 0.9864590764045715, 'acc': 0.625, 'step': 700},\n",
       "  {'loss': 1.0313892364501953, 'acc': 0.5625, 'step': 701},\n",
       "  {'loss': 1.0083911418914795, 'acc': 0.5625, 'step': 702},\n",
       "  {'loss': 0.9724286198616028, 'acc': 0.625, 'step': 703},\n",
       "  {'loss': 1.0423774719238281, 'acc': 0.65625, 'step': 704},\n",
       "  {'loss': 0.8987158536911011, 'acc': 0.65625, 'step': 705},\n",
       "  {'loss': 0.7337712049484253, 'acc': 0.78125, 'step': 706},\n",
       "  {'loss': 0.8569047451019287, 'acc': 0.6875, 'step': 707},\n",
       "  {'loss': 1.0123573541641235, 'acc': 0.65625, 'step': 708},\n",
       "  {'loss': 1.0158684253692627, 'acc': 0.6875, 'step': 709},\n",
       "  {'loss': 0.9517204761505127, 'acc': 0.625, 'step': 710},\n",
       "  {'loss': 1.0052647590637207, 'acc': 0.71875, 'step': 711},\n",
       "  {'loss': 0.9454861879348755, 'acc': 0.625, 'step': 712},\n",
       "  {'loss': 1.0455515384674072, 'acc': 0.5625, 'step': 713},\n",
       "  {'loss': 0.9235695004463196, 'acc': 0.625, 'step': 714},\n",
       "  {'loss': 0.904540479183197, 'acc': 0.65625, 'step': 715},\n",
       "  {'loss': 0.9148289561271667, 'acc': 0.625, 'step': 716},\n",
       "  {'loss': 1.0085129737854004, 'acc': 0.59375, 'step': 717},\n",
       "  {'loss': 1.1327120065689087, 'acc': 0.5625, 'step': 718},\n",
       "  {'loss': 0.8361777067184448, 'acc': 0.78125, 'step': 719},\n",
       "  {'loss': 0.9734036922454834, 'acc': 0.6875, 'step': 720},\n",
       "  {'loss': 0.8224072456359863, 'acc': 0.78125, 'step': 721},\n",
       "  {'loss': 0.9651945233345032, 'acc': 0.71875, 'step': 722},\n",
       "  {'loss': 0.9741074442863464, 'acc': 0.59375, 'step': 723},\n",
       "  {'loss': 1.0727007389068604, 'acc': 0.6875, 'step': 724},\n",
       "  {'loss': 1.0134987831115723, 'acc': 0.625, 'step': 725},\n",
       "  {'loss': 0.8183869123458862, 'acc': 0.78125, 'step': 726},\n",
       "  {'loss': 1.343383550643921, 'acc': 0.59375, 'step': 727},\n",
       "  {'loss': 1.022458791732788, 'acc': 0.71875, 'step': 728},\n",
       "  {'loss': 0.9461606740951538, 'acc': 0.78125, 'step': 729},\n",
       "  {'loss': 1.0229963064193726, 'acc': 0.59375, 'step': 730},\n",
       "  {'loss': 0.784177839756012, 'acc': 0.78125, 'step': 731},\n",
       "  {'loss': 0.9754440188407898, 'acc': 0.59375, 'step': 732},\n",
       "  {'loss': 0.949254035949707, 'acc': 0.78125, 'step': 733},\n",
       "  {'loss': 0.8799598217010498, 'acc': 0.59375, 'step': 734},\n",
       "  {'loss': 0.9026265144348145, 'acc': 0.65625, 'step': 735},\n",
       "  {'loss': 0.9333063364028931, 'acc': 0.625, 'step': 736},\n",
       "  {'loss': 0.9635536670684814, 'acc': 0.65625, 'step': 737},\n",
       "  {'loss': 0.8129366040229797, 'acc': 0.6875, 'step': 738},\n",
       "  {'loss': 1.1341750621795654, 'acc': 0.65625, 'step': 739},\n",
       "  {'loss': 1.04752516746521, 'acc': 0.625, 'step': 740},\n",
       "  {'loss': 0.7649771571159363, 'acc': 0.8125, 'step': 741},\n",
       "  {'loss': 0.7434102296829224, 'acc': 0.75, 'step': 742},\n",
       "  {'loss': 0.9161866307258606, 'acc': 0.59375, 'step': 743},\n",
       "  {'loss': 0.9309494495391846, 'acc': 0.5625, 'step': 744},\n",
       "  {'loss': 0.9088346362113953, 'acc': 0.65625, 'step': 745},\n",
       "  {'loss': 0.7497623562812805, 'acc': 0.78125, 'step': 746},\n",
       "  {'loss': 0.8760973215103149, 'acc': 0.78125, 'step': 747},\n",
       "  {'loss': 0.8891448378562927, 'acc': 0.75, 'step': 748},\n",
       "  {'loss': 0.9159988164901733, 'acc': 0.75, 'step': 749},\n",
       "  {'loss': 0.789526104927063, 'acc': 0.8125, 'step': 750},\n",
       "  {'loss': 0.8357131481170654, 'acc': 0.75, 'step': 751},\n",
       "  {'loss': 0.9160997271537781, 'acc': 0.6875, 'step': 752},\n",
       "  {'loss': 1.0151751041412354, 'acc': 0.6875, 'step': 753},\n",
       "  {'loss': 1.0660072565078735, 'acc': 0.59375, 'step': 754},\n",
       "  {'loss': 0.6733614802360535, 'acc': 0.84375, 'step': 755},\n",
       "  {'loss': 0.8671176433563232, 'acc': 0.78125, 'step': 756},\n",
       "  {'loss': 0.8280792832374573, 'acc': 0.65625, 'step': 757},\n",
       "  {'loss': 0.9625779986381531, 'acc': 0.625, 'step': 758},\n",
       "  {'loss': 0.8595820069313049, 'acc': 0.71875, 'step': 759},\n",
       "  {'loss': 1.188392162322998, 'acc': 0.5625, 'step': 760},\n",
       "  {'loss': 0.799942135810852, 'acc': 0.71875, 'step': 761},\n",
       "  {'loss': 0.9429935216903687, 'acc': 0.6875, 'step': 762},\n",
       "  {'loss': 0.7661662697792053, 'acc': 0.75, 'step': 763},\n",
       "  {'loss': 1.080418586730957, 'acc': 0.65625, 'step': 764},\n",
       "  {'loss': 1.0734096765518188, 'acc': 0.65625, 'step': 765},\n",
       "  {'loss': 1.0214719772338867, 'acc': 0.625, 'step': 766},\n",
       "  {'loss': 0.8139479160308838, 'acc': 0.65625, 'step': 767},\n",
       "  {'loss': 1.0162737369537354, 'acc': 0.625, 'step': 768},\n",
       "  {'loss': 1.0352280139923096, 'acc': 0.59375, 'step': 769},\n",
       "  {'loss': 1.0878503322601318, 'acc': 0.5625, 'step': 770},\n",
       "  {'loss': 0.9669124484062195, 'acc': 0.65625, 'step': 771},\n",
       "  {'loss': 0.9827501177787781, 'acc': 0.59375, 'step': 772},\n",
       "  {'loss': 0.9892676472663879, 'acc': 0.5, 'step': 773},\n",
       "  {'loss': 0.949957013130188, 'acc': 0.53125, 'step': 774},\n",
       "  {'loss': 0.9206283688545227, 'acc': 0.625, 'step': 775},\n",
       "  {'loss': 1.0035101175308228, 'acc': 0.5625, 'step': 776},\n",
       "  {'loss': 0.9339299201965332, 'acc': 0.6875, 'step': 777},\n",
       "  {'loss': 0.8417614698410034, 'acc': 0.75, 'step': 778},\n",
       "  {'loss': 0.9880050420761108, 'acc': 0.625, 'step': 779},\n",
       "  {'loss': 0.7016764283180237, 'acc': 0.90625, 'step': 780},\n",
       "  {'loss': 1.0809783935546875, 'acc': 0.53125, 'step': 781},\n",
       "  {'loss': 0.9052844047546387, 'acc': 0.71875, 'step': 782},\n",
       "  {'loss': 0.9189497828483582, 'acc': 0.6875, 'step': 783},\n",
       "  {'loss': 0.8289350867271423, 'acc': 0.71875, 'step': 784},\n",
       "  {'loss': 1.0914576053619385, 'acc': 0.53125, 'step': 785},\n",
       "  {'loss': 0.8278120756149292, 'acc': 0.75, 'step': 786},\n",
       "  {'loss': 0.962177038192749, 'acc': 0.625, 'step': 787},\n",
       "  {'loss': 0.8078189492225647, 'acc': 0.75, 'step': 788},\n",
       "  {'loss': 1.2074720859527588, 'acc': 0.40625, 'step': 789},\n",
       "  {'loss': 0.6844710111618042, 'acc': 0.78125, 'step': 790},\n",
       "  {'loss': 1.0664458274841309, 'acc': 0.625, 'step': 791},\n",
       "  {'loss': 0.9735892415046692, 'acc': 0.625, 'step': 792},\n",
       "  {'loss': 0.8936646580696106, 'acc': 0.625, 'step': 793},\n",
       "  {'loss': 0.9342799186706543, 'acc': 0.6875, 'step': 794},\n",
       "  {'loss': 0.7991839647293091, 'acc': 0.78125, 'step': 795},\n",
       "  {'loss': 0.9996951818466187, 'acc': 0.59375, 'step': 796},\n",
       "  {'loss': 0.9731056690216064, 'acc': 0.59375, 'step': 797},\n",
       "  {'loss': 1.0772377252578735, 'acc': 0.5, 'step': 798},\n",
       "  {'loss': 0.78426194190979, 'acc': 0.78125, 'step': 799},\n",
       "  {'loss': 0.8407066464424133, 'acc': 0.71875, 'step': 800},\n",
       "  {'loss': 0.732420802116394, 'acc': 0.71875, 'step': 801},\n",
       "  {'loss': 1.1818742752075195, 'acc': 0.5, 'step': 802},\n",
       "  {'loss': 0.6507038474082947, 'acc': 0.78125, 'step': 803},\n",
       "  {'loss': 0.817392885684967, 'acc': 0.6875, 'step': 804},\n",
       "  {'loss': 1.0050654411315918, 'acc': 0.65625, 'step': 805},\n",
       "  {'loss': 0.7673905491828918, 'acc': 0.8125, 'step': 806},\n",
       "  {'loss': 0.827795684337616, 'acc': 0.71875, 'step': 807},\n",
       "  {'loss': 0.6980729699134827, 'acc': 0.75, 'step': 808},\n",
       "  {'loss': 0.9305403828620911, 'acc': 0.625, 'step': 809},\n",
       "  {'loss': 0.7946622967720032, 'acc': 0.65625, 'step': 810},\n",
       "  {'loss': 0.9101081490516663, 'acc': 0.59375, 'step': 811},\n",
       "  {'loss': 0.9938105344772339, 'acc': 0.65625, 'step': 812},\n",
       "  {'loss': 0.8187538385391235, 'acc': 0.71875, 'step': 813},\n",
       "  {'loss': 0.7647937536239624, 'acc': 0.75, 'step': 814},\n",
       "  {'loss': 0.8565796613693237, 'acc': 0.65625, 'step': 815},\n",
       "  {'loss': 1.108041524887085, 'acc': 0.4375, 'step': 816},\n",
       "  {'loss': 0.8047857284545898, 'acc': 0.71875, 'step': 817},\n",
       "  {'loss': 0.7440685033798218, 'acc': 0.71875, 'step': 818},\n",
       "  {'loss': 0.9468631744384766, 'acc': 0.5625, 'step': 819},\n",
       "  {'loss': 0.6622956395149231, 'acc': 0.875, 'step': 820},\n",
       "  {'loss': 0.7017185091972351, 'acc': 0.84375, 'step': 821},\n",
       "  {'loss': 0.9561208486557007, 'acc': 0.6875, 'step': 822},\n",
       "  {'loss': 0.7035573720932007, 'acc': 0.75, 'step': 823},\n",
       "  {'loss': 0.955958902835846, 'acc': 0.6875, 'step': 824},\n",
       "  {'loss': 1.1678063869476318, 'acc': 0.53125, 'step': 825},\n",
       "  {'loss': 1.0781491994857788, 'acc': 0.53125, 'step': 826},\n",
       "  {'loss': 1.0428733825683594, 'acc': 0.59375, 'step': 827},\n",
       "  {'loss': 1.139750361442566, 'acc': 0.53125, 'step': 828},\n",
       "  {'loss': 0.9632152915000916, 'acc': 0.65625, 'step': 829},\n",
       "  {'loss': 0.7434055805206299, 'acc': 0.75, 'step': 830},\n",
       "  {'loss': 0.9549866914749146, 'acc': 0.625, 'step': 831},\n",
       "  {'loss': 0.8532372117042542, 'acc': 0.625, 'step': 832},\n",
       "  {'loss': 0.9112294316291809, 'acc': 0.6875, 'step': 833},\n",
       "  {'loss': 0.6801971197128296, 'acc': 0.78125, 'step': 834},\n",
       "  {'loss': 0.884087860584259, 'acc': 0.625, 'step': 835},\n",
       "  {'loss': 1.18947434425354, 'acc': 0.53125, 'step': 836},\n",
       "  {'loss': 0.946456789970398, 'acc': 0.65625, 'step': 837},\n",
       "  {'loss': 0.8944082856178284, 'acc': 0.5, 'step': 838},\n",
       "  {'loss': 0.7240060567855835, 'acc': 0.75, 'step': 839},\n",
       "  {'loss': 1.0159008502960205, 'acc': 0.6875, 'step': 840},\n",
       "  {'loss': 0.7917602062225342, 'acc': 0.59375, 'step': 841},\n",
       "  {'loss': 0.8339903354644775, 'acc': 0.65625, 'step': 842},\n",
       "  {'loss': 0.8994395732879639, 'acc': 0.65625, 'step': 843},\n",
       "  {'loss': 0.8649075031280518, 'acc': 0.625, 'step': 844},\n",
       "  {'loss': 0.7730291485786438, 'acc': 0.75, 'step': 845},\n",
       "  {'loss': 0.7230874300003052, 'acc': 0.8125, 'step': 846},\n",
       "  {'loss': 0.776088535785675, 'acc': 0.78125, 'step': 847},\n",
       "  {'loss': 0.6958778500556946, 'acc': 0.71875, 'step': 848},\n",
       "  {'loss': 1.248110294342041, 'acc': 0.6875, 'step': 849},\n",
       "  {'loss': 0.7100335955619812, 'acc': 0.71875, 'step': 850},\n",
       "  {'loss': 0.9076899886131287, 'acc': 0.625, 'step': 851},\n",
       "  {'loss': 0.886800229549408, 'acc': 0.625, 'step': 852},\n",
       "  {'loss': 0.9348292350769043, 'acc': 0.6875, 'step': 853},\n",
       "  {'loss': 1.054005742073059, 'acc': 0.5625, 'step': 854},\n",
       "  {'loss': 0.905058741569519, 'acc': 0.59375, 'step': 855},\n",
       "  {'loss': 0.8681309223175049, 'acc': 0.65625, 'step': 856},\n",
       "  {'loss': 0.7314110398292542, 'acc': 0.75, 'step': 857},\n",
       "  {'loss': 0.7574922442436218, 'acc': 0.75, 'step': 858},\n",
       "  {'loss': 0.7221810817718506, 'acc': 0.8125, 'step': 859},\n",
       "  {'loss': 0.9700326919555664, 'acc': 0.6875, 'step': 860},\n",
       "  {'loss': 0.8512187004089355, 'acc': 0.59375, 'step': 861},\n",
       "  {'loss': 0.8897678852081299, 'acc': 0.78125, 'step': 862},\n",
       "  {'loss': 0.9742816090583801, 'acc': 0.71875, 'step': 863},\n",
       "  {'loss': 0.8833076357841492, 'acc': 0.53125, 'step': 864},\n",
       "  {'loss': 1.0696929693222046, 'acc': 0.53125, 'step': 865},\n",
       "  {'loss': 0.8435201048851013, 'acc': 0.6875, 'step': 866},\n",
       "  {'loss': 0.6997024416923523, 'acc': 0.84375, 'step': 867},\n",
       "  {'loss': 0.6719220876693726, 'acc': 0.78125, 'step': 868},\n",
       "  {'loss': 0.6968526840209961, 'acc': 0.8125, 'step': 869},\n",
       "  {'loss': 0.8578105568885803, 'acc': 0.75, 'step': 870},\n",
       "  {'loss': 1.0032318830490112, 'acc': 0.6875, 'step': 871},\n",
       "  {'loss': 0.9249369502067566, 'acc': 0.65625, 'step': 872},\n",
       "  {'loss': 1.0511999130249023, 'acc': 0.78125, 'step': 873},\n",
       "  {'loss': 0.9801625609397888, 'acc': 0.625, 'step': 874},\n",
       "  {'loss': 0.8065691590309143, 'acc': 0.625, 'step': 875},\n",
       "  {'loss': 0.8934983015060425, 'acc': 0.65625, 'step': 876},\n",
       "  {'loss': 0.9441892504692078, 'acc': 0.5625, 'step': 877},\n",
       "  {'loss': 0.9668131470680237, 'acc': 0.625, 'step': 878},\n",
       "  {'loss': 0.8160536289215088, 'acc': 0.625, 'step': 879},\n",
       "  {'loss': 0.5826123356819153, 'acc': 0.78125, 'step': 880},\n",
       "  {'loss': 0.8326249122619629, 'acc': 0.71875, 'step': 881},\n",
       "  {'loss': 0.8751094937324524, 'acc': 0.6875, 'step': 882},\n",
       "  {'loss': 0.9067607522010803, 'acc': 0.59375, 'step': 883},\n",
       "  {'loss': 0.8481308817863464, 'acc': 0.65625, 'step': 884},\n",
       "  {'loss': 0.7839391827583313, 'acc': 0.78125, 'step': 885},\n",
       "  {'loss': 0.8084015846252441, 'acc': 0.5625, 'step': 886},\n",
       "  {'loss': 0.9155402779579163, 'acc': 0.6875, 'step': 887},\n",
       "  {'loss': 0.8193998336791992, 'acc': 0.6875, 'step': 888},\n",
       "  {'loss': 1.158325433731079, 'acc': 0.625, 'step': 889},\n",
       "  {'loss': 0.8451893925666809, 'acc': 0.78125, 'step': 890},\n",
       "  {'loss': 0.6444082856178284, 'acc': 0.8125, 'step': 891},\n",
       "  {'loss': 0.8881283402442932, 'acc': 0.71875, 'step': 892},\n",
       "  {'loss': 0.8492611050605774, 'acc': 0.71875, 'step': 893},\n",
       "  {'loss': 0.9155122637748718, 'acc': 0.6875, 'step': 894},\n",
       "  {'loss': 1.110607624053955, 'acc': 0.5625, 'step': 895},\n",
       "  {'loss': 0.8398679494857788, 'acc': 0.71875, 'step': 896},\n",
       "  {'loss': 0.8311364650726318, 'acc': 0.71875, 'step': 897},\n",
       "  {'loss': 0.8112363815307617, 'acc': 0.625, 'step': 898},\n",
       "  {'loss': 0.8748995661735535, 'acc': 0.75, 'step': 899},\n",
       "  {'loss': 0.8017938733100891, 'acc': 0.75, 'step': 900},\n",
       "  {'loss': 0.9168968200683594, 'acc': 0.625, 'step': 901},\n",
       "  {'loss': 0.8395525813102722, 'acc': 0.625, 'step': 902},\n",
       "  {'loss': 0.8381789326667786, 'acc': 0.65625, 'step': 903},\n",
       "  {'loss': 0.7390784621238708, 'acc': 0.78125, 'step': 904},\n",
       "  {'loss': 0.8660325407981873, 'acc': 0.625, 'step': 905},\n",
       "  {'loss': 0.84339839220047, 'acc': 0.71875, 'step': 906},\n",
       "  {'loss': 0.9489744305610657, 'acc': 0.625, 'step': 907},\n",
       "  {'loss': 0.9465376138687134, 'acc': 0.71875, 'step': 908},\n",
       "  {'loss': 1.054144263267517, 'acc': 0.46875, 'step': 909},\n",
       "  {'loss': 0.7680861353874207, 'acc': 0.71875, 'step': 910},\n",
       "  {'loss': 0.9594743251800537, 'acc': 0.65625, 'step': 911},\n",
       "  {'loss': 0.8288470506668091, 'acc': 0.6875, 'step': 912},\n",
       "  {'loss': 0.7248976230621338, 'acc': 0.71875, 'step': 913},\n",
       "  {'loss': 0.8486892580986023, 'acc': 0.65625, 'step': 914},\n",
       "  {'loss': 0.8222033381462097, 'acc': 0.6875, 'step': 915},\n",
       "  {'loss': 0.7392880916595459, 'acc': 0.625, 'step': 916},\n",
       "  {'loss': 0.8566025495529175, 'acc': 0.65625, 'step': 917},\n",
       "  {'loss': 0.6745421290397644, 'acc': 0.75, 'step': 918},\n",
       "  {'loss': 0.8475603461265564, 'acc': 0.6875, 'step': 919},\n",
       "  {'loss': 0.5504286289215088, 'acc': 0.8125, 'step': 920},\n",
       "  {'loss': 0.899097740650177, 'acc': 0.71875, 'step': 921},\n",
       "  {'loss': 0.8721054196357727, 'acc': 0.5, 'step': 922},\n",
       "  {'loss': 0.9235882759094238, 'acc': 0.625, 'step': 923},\n",
       "  {'loss': 0.6998428702354431, 'acc': 0.75, 'step': 924},\n",
       "  {'loss': 0.7873678803443909, 'acc': 0.625, 'step': 925},\n",
       "  {'loss': 0.9653113484382629, 'acc': 0.625, 'step': 926},\n",
       "  {'loss': 0.8088144659996033, 'acc': 0.625, 'step': 927},\n",
       "  {'loss': 0.9248111248016357, 'acc': 0.625, 'step': 928},\n",
       "  {'loss': 0.8727632164955139, 'acc': 0.59375, 'step': 929},\n",
       "  {'loss': 0.8496086597442627, 'acc': 0.6875, 'step': 930},\n",
       "  {'loss': 0.6888240575790405, 'acc': 0.71875, 'step': 931},\n",
       "  {'loss': 0.9238736629486084, 'acc': 0.625, 'step': 932},\n",
       "  {'loss': 0.88483726978302, 'acc': 0.65625, 'step': 933},\n",
       "  {'loss': 0.8268081545829773, 'acc': 0.65625, 'step': 934},\n",
       "  {'loss': 0.7818451523780823, 'acc': 0.6875, 'step': 935},\n",
       "  {'loss': 0.9638404250144958, 'acc': 0.625, 'step': 936},\n",
       "  {'loss': 0.8831580877304077, 'acc': 0.71875, 'step': 937},\n",
       "  {'loss': 0.7814637422561646, 'acc': 0.6875, 'step': 938},\n",
       "  {'loss': 0.9415513873100281, 'acc': 0.65625, 'step': 939},\n",
       "  {'loss': 1.0899043083190918, 'acc': 0.59375, 'step': 940},\n",
       "  {'loss': 1.0292978286743164, 'acc': 0.59375, 'step': 941},\n",
       "  {'loss': 0.9870222806930542, 'acc': 0.5625, 'step': 942},\n",
       "  {'loss': 1.0909910202026367, 'acc': 0.625, 'step': 943},\n",
       "  {'loss': 0.6771713495254517, 'acc': 0.78125, 'step': 944},\n",
       "  {'loss': 1.1386332511901855, 'acc': 0.59375, 'step': 945},\n",
       "  {'loss': 0.6995181441307068, 'acc': 0.75, 'step': 946},\n",
       "  {'loss': 0.9642653465270996, 'acc': 0.59375, 'step': 947},\n",
       "  {'loss': 0.7406557202339172, 'acc': 0.6875, 'step': 948},\n",
       "  {'loss': 0.8401535749435425, 'acc': 0.625, 'step': 949},\n",
       "  {'loss': 1.1997400522232056, 'acc': 0.53125, 'step': 950},\n",
       "  {'loss': 0.6537323594093323, 'acc': 0.875, 'step': 951},\n",
       "  {'loss': 0.7896428108215332, 'acc': 0.6875, 'step': 952},\n",
       "  {'loss': 0.7606230974197388, 'acc': 0.6875, 'step': 953},\n",
       "  {'loss': 0.7046731114387512, 'acc': 0.75, 'step': 954},\n",
       "  {'loss': 0.732024073600769, 'acc': 0.75, 'step': 955},\n",
       "  {'loss': 0.6471425294876099, 'acc': 0.8125, 'step': 956},\n",
       "  {'loss': 0.6805500984191895, 'acc': 0.8125, 'step': 957},\n",
       "  {'loss': 0.6780722737312317, 'acc': 0.78125, 'step': 958},\n",
       "  {'loss': 0.9313768744468689, 'acc': 0.59375, 'step': 959},\n",
       "  {'loss': 0.8349778652191162, 'acc': 0.65625, 'step': 960},\n",
       "  {'loss': 1.1705936193466187, 'acc': 0.53125, 'step': 961},\n",
       "  {'loss': 0.745512068271637, 'acc': 0.71875, 'step': 962},\n",
       "  {'loss': 0.7037919759750366, 'acc': 0.8125, 'step': 963},\n",
       "  {'loss': 0.869202196598053, 'acc': 0.6875, 'step': 964},\n",
       "  {'loss': 0.9943770170211792, 'acc': 0.5, 'step': 965},\n",
       "  {'loss': 0.9357976317405701, 'acc': 0.625, 'step': 966},\n",
       "  {'loss': 0.7291715741157532, 'acc': 0.6875, 'step': 967},\n",
       "  {'loss': 0.8783255219459534, 'acc': 0.71875, 'step': 968},\n",
       "  {'loss': 0.6422471404075623, 'acc': 0.6875, 'step': 969},\n",
       "  {'loss': 0.6828051805496216, 'acc': 0.75, 'step': 970},\n",
       "  {'loss': 0.7854143977165222, 'acc': 0.75, 'step': 971},\n",
       "  {'loss': 0.712095320224762, 'acc': 0.8125, 'step': 972},\n",
       "  {'loss': 0.6373808979988098, 'acc': 0.75, 'step': 973},\n",
       "  {'loss': 0.8369075059890747, 'acc': 0.71875, 'step': 974},\n",
       "  {'loss': 0.9703223705291748, 'acc': 0.59375, 'step': 975},\n",
       "  {'loss': 0.8936668038368225, 'acc': 0.59375, 'step': 976},\n",
       "  {'loss': 0.9167882204055786, 'acc': 0.6875, 'step': 977},\n",
       "  {'loss': 0.9225593209266663, 'acc': 0.65625, 'step': 978},\n",
       "  {'loss': 0.7676378488540649, 'acc': 0.6875, 'step': 979},\n",
       "  {'loss': 0.7302582263946533, 'acc': 0.6875, 'step': 980},\n",
       "  {'loss': 0.8107348680496216, 'acc': 0.71875, 'step': 981},\n",
       "  {'loss': 0.9683946371078491, 'acc': 0.625, 'step': 982},\n",
       "  {'loss': 0.6976694464683533, 'acc': 0.78125, 'step': 983},\n",
       "  {'loss': 1.0482757091522217, 'acc': 0.65625, 'step': 984},\n",
       "  {'loss': 0.7133778929710388, 'acc': 0.75, 'step': 985},\n",
       "  {'loss': 0.8375762104988098, 'acc': 0.75, 'step': 986},\n",
       "  {'loss': 0.8855312466621399, 'acc': 0.6875, 'step': 987},\n",
       "  {'loss': 0.6894757747650146, 'acc': 0.78125, 'step': 988},\n",
       "  {'loss': 0.9348114132881165, 'acc': 0.65625, 'step': 989},\n",
       "  {'loss': 1.0381098985671997, 'acc': 0.65625, 'step': 990},\n",
       "  {'loss': 0.9600396156311035, 'acc': 0.6875, 'step': 991},\n",
       "  {'loss': 0.61327064037323, 'acc': 0.75, 'step': 992},\n",
       "  {'loss': 0.8515504598617554, 'acc': 0.78125, 'step': 993},\n",
       "  {'loss': 0.7613384127616882, 'acc': 0.875, 'step': 994},\n",
       "  {'loss': 0.8211007714271545, 'acc': 0.6875, 'step': 995},\n",
       "  {'loss': 0.5862213969230652, 'acc': 0.875, 'step': 996},\n",
       "  {'loss': 0.9531062245368958, 'acc': 0.625, 'step': 997},\n",
       "  {'loss': 0.8338407874107361, 'acc': 0.71875, 'step': 998},\n",
       "  {'loss': 0.7175342440605164, 'acc': 0.78125, 'step': 999},\n",
       "  ...],\n",
       " 'val': [{'loss': 2.3083016415373585, 'acc': 0.0791, 'step': 0},\n",
       "  {'loss': 0.8361350767338238, 'acc': 0.7007, 'step': 1000},\n",
       "  {'loss': 0.6704540422168402, 'acc': 0.7633, 'step': 2000},\n",
       "  {'loss': 0.5842364490413057, 'acc': 0.7936, 'step': 3000},\n",
       "  {'loss': 0.5355462943688749, 'acc': 0.8131, 'step': 4000},\n",
       "  {'loss': 0.5211076350829091, 'acc': 0.8157, 'step': 5000},\n",
       "  {'loss': 0.4964908553293338, 'acc': 0.8243, 'step': 6000},\n",
       "  {'loss': 0.487230337037446, 'acc': 0.8307, 'step': 7000},\n",
       "  {'loss': 0.4643134509983916, 'acc': 0.8351, 'step': 8000},\n",
       "  {'loss': 0.4804135981363991, 'acc': 0.8267, 'step': 9000},\n",
       "  {'loss': 0.4531454066403758, 'acc': 0.8366, 'step': 10000},\n",
       "  {'loss': 0.44437747332044303, 'acc': 0.8432, 'step': 11000},\n",
       "  {'loss': 0.43466566324519657, 'acc': 0.8454, 'step': 12000},\n",
       "  {'loss': 0.4295872925712278, 'acc': 0.8495, 'step': 13000},\n",
       "  {'loss': 0.422986631742872, 'acc': 0.8529, 'step': 14000},\n",
       "  {'loss': 0.4129973824698323, 'acc': 0.8531, 'step': 15000},\n",
       "  {'loss': 0.424347562530932, 'acc': 0.8497, 'step': 16000},\n",
       "  {'loss': 0.40311987393389875, 'acc': 0.8562, 'step': 17000},\n",
       "  {'loss': 0.40203336921458044, 'acc': 0.8577, 'step': 18000},\n",
       "  {'loss': 0.3975654331068642, 'acc': 0.8587, 'step': 19000},\n",
       "  {'loss': 0.395111640349935, 'acc': 0.8596, 'step': 20000},\n",
       "  {'loss': 0.3934721753429681, 'acc': 0.8588, 'step': 21000},\n",
       "  {'loss': 0.3891480992348811, 'acc': 0.8593, 'step': 22000},\n",
       "  {'loss': 0.4012721949063551, 'acc': 0.8533, 'step': 23000},\n",
       "  {'loss': 0.3879322967352197, 'acc': 0.8621, 'step': 24000},\n",
       "  {'loss': 0.38394599117505285, 'acc': 0.8629, 'step': 25000},\n",
       "  {'loss': 0.38635352406258017, 'acc': 0.8632, 'step': 26000},\n",
       "  {'loss': 0.3779879973148005, 'acc': 0.864, 'step': 27000}]}"
      ]
     },
     "execution_count": 19,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "execution_count": 19
  },
  {
   "cell_type": "code",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-01-16T03:11:57.098349Z",
     "start_time": "2025-01-16T03:11:57.010768Z"
    }
   },
   "source": [
    "#画线要注意的是损失是不一定在零到1之间的\n",
    "def plot_learning_curves(record_dict, sample_step=500):\n",
    "    # build DataFrame\n",
    "    train_df = pd.DataFrame(record_dict[\"train\"]).set_index(\"step\").iloc[::sample_step]\n",
    "    val_df = pd.DataFrame(record_dict[\"val\"]).set_index(\"step\")\n",
    "    print(train_df.head())\n",
    "    print(val_df.head())\n",
    "    # plot\n",
    "    fig_num = len(train_df.columns) #因为有loss和acc两个指标，所以画个子图\n",
    "    fig, axs = plt.subplots(1, fig_num, figsize=(5 * fig_num, 5)) #fig_num个子图，figsize是子图大小\n",
    "    for idx, item in enumerate(train_df.columns):    \n",
    "        #index是步数，item是指标名字\n",
    "        axs[idx].plot(train_df.index, train_df[item], label=f\"train_{item}\")\n",
    "        axs[idx].plot(val_df.index, val_df[item], label=f\"val_{item}\")\n",
    "        axs[idx].grid()\n",
    "        axs[idx].legend()\n",
    "        x_data=range(0, train_df.index[-1], 5000) #每隔5000步标出一个点\n",
    "        axs[idx].set_xticks(x_data)\n",
    "        axs[idx].set_xticklabels(map(lambda x: f\"{int(x/1000)}k\", x_data)) #map生成labal\n",
    "        axs[idx].set_xlabel(\"step\")\n",
    "    \n",
    "    plt.show()\n",
    "\n",
    "plot_learning_curves(record, sample_step=500)  #横坐标是 steps"
   ],
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "          loss      acc\n",
      "step                   \n",
      "0     2.298137  0.06250\n",
      "500   1.176561  0.56250\n",
      "1000  0.734036  0.78125\n",
      "1500  0.642334  0.84375\n",
      "2000  0.675943  0.87500\n",
      "          loss     acc\n",
      "step                  \n",
      "0     2.308302  0.0791\n",
      "1000  0.836135  0.7007\n",
      "2000  0.670454  0.7633\n",
      "3000  0.584236  0.7936\n",
      "4000  0.535546  0.8131\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "<Figure size 1000x500 with 2 Axes>"
      ],
      "image/png": "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"
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "execution_count": 24
  },
  {
   "attachments": {},
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 评估"
   ]
  },
  {
   "cell_type": "code",
   "source": [
    "model = NeuralNetwork() #上线时加载模型\n",
    "model = model.to(device)"
   ],
   "metadata": {
    "collapsed": false,
    "ExecuteTime": {
     "end_time": "2025-01-16T03:13:55.432497Z",
     "start_time": "2025-01-16T03:13:55.428482Z"
    }
   },
   "outputs": [],
   "execution_count": 25
  },
  {
   "cell_type": "code",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-01-16T03:18:55.049970Z",
     "start_time": "2025-01-16T03:18:54.524867Z"
    }
   },
   "source": [
    "# dataload for evaluating\n",
    "#模型保存有两种情况，一种是模型结构和模型参数都保存，一种是只保存模型参数，这里是只保存模型参数，所以需要加上weights_only=True\n",
    "# load checkpoints\n",
    "model.load_state_dict(torch.load(\"checkpoints/best.ckpt\", weights_only=True,map_location=\"cpu\"))\n",
    "\n",
    "model.eval()\n",
    "loss, acc = evaluating(model, val_loader, loss_fct)\n",
    "print(f\"loss:     {loss:.4f}\\naccuracy: {acc:.4f}\")"
   ],
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "loss:     0.3780\n",
      "accuracy: 0.8640\n"
     ]
    }
   ],
   "execution_count": 27
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "pytorch",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.10.8"
  },
  "orig_nbformat": 4
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
